12月31日消息 1 月 1 日 0 点,小米 11 全渠道首卖,售价3999元起。小米原装 55W 氮化镓充电 + 充电线套装也将同时上市,售价 99 元。IT之家了解到,这款充电器外观小巧,内置智能芯片,可以给手机、笔记本电脑等常用设备充电。它支持 AC100 到 240V 宽幅电压输入,出国也能用。小米原装 55W 氮化镓充电器支持 5V3A、9V3A、11V5A 和 20V2.5A Max 输出,可以为小米 11 提供 55W Max 的充电功率。包装内含有一根 6A 数据线。安全性方面, 小米原装 55W 氮化镓充电器支持包括短路保护、过流保护、过温保护、欠压保护...... Last article READ

教程与实战:OpenCV使用CUDA处理图像

import cv2 as cv

gpu_frame = cv.cuda_GpuMat()

screenshot = cv.imread('media/drip.png')

gpu_frame.upload(screenshot)

gpu_frame.download()

概述在单张图像上使用在多张图像上使用对多张图像使用Dask进行并行延时处理在单张图像上使用我们需要创建GPU空间(GPU_frame)来保存图像(就像相框保存图片一样),然后才能将图像上传到GPU。第1步:上传import cv2 as cv

gpu_frame = cv.cuda_GpuMat()

接下来用CPU将图像加载到内存中(截图),并将其上传到gpu上(帧图像);screenshot = cv.imread('media/drop.png')

gpu_frame.upload(screenshot)

第2步:处理图像OpenCV CUDA函数返回cv2.cuda_GpuMat(GPU矩阵),因此每个结果都可以在用户不必重新上传的情况下进行操作。让我们把图像从RGB转换成BGR(OpenCV格式),然后调整大小;screenshot = cv.cuda.cvtColor(gpu_frame, cv.COLOR_RGB2BGR)
screenshot = cv.cuda.resize(screenshot, (400, 400))

注意:你调用的函数的第一个参数应该是GPU矩阵(GPU帧),而不是你刚刚上传的图像,这会返回一个新的GPU矩阵。原始的GPU矩阵(gpu_frame)将继续保存原始图像,直到新图像被上传。第3步:下载处理之后的图像在GPU上,我们需要把它下载回CPU;screenshot.download()

注意:.download()将从cv转换为图像,即从cuda_GpuMat到 numpy.ndarray。在多张图像上使用如果需要处理新图片,只需调用.upload()将新图片加载到现有的GPU矩阵中。图像在传递给GPU之前仍然必须加载到CPU上。import cv2 as cv

img_files = ['bear.png', 'drip.png', 'tldr.png', 'frog.png']

# 创建帧来保存图片(cv2.cuda_GpuMat)

gpu_frame = cv.cuda_GpuMat()

for i in range(len(img_files)):
   # 加载图像(CPU)
   screenshot = cv.imread(f"media/{img_files[i]}")
   # 上传到GPU
   gpu_frame.upload(screenshot)
   # 转换颜色到opencv (numpy) ndarray→cv2.cuda_GpuMat
   screenshot = cv.cuda.cvtColor(gpu_frame, cv.COLOR_RGB2BGR)
   # 反向阈值@ 100
   screenshot = cv.cuda.threshold(screenshot, 105, 255, cv.THRESH_BINARY_INV)
   # 调整图像
   screenshot = cv.cuda.resize(screenshot[1], (200, 200))
   # 从GPU下载图像(cv2) cuda_GpuMat→numpy.ndarray
   screenshot = screenshot.download()
这一次我们在预处理中添加了一个反向的binary.threshold()函数;

对多张图像使用Dask进行并行延时处理使用Dask延时,我们可以将上面的循环推入到Dask延时函数,并行预处理多张图。import cv2 as cv
import dask.delayed
@dask.delayed
def preprocess(files):
   # 复制图像文件
   i_files = files.copy()
   # 创建GPU帧来保存图像
   gpu_frame = cv.cuda_GpuMat()
   for i in range(len(i_files)):
       # 加载图像(CPU)
       screenshot = cv.imread(f'media/{i_files[i]}')
       # 上传到GPU
       gpu_frame.upload(screenshot)
       # 转换颜色到opencv (numpy) ndarray→cv2.cuda_GpuMat
       screenshot = cv.cuda.cvtColor(gpu_frame, cv.COLOR_RGB2BGR)
       screenshot = cv.cuda.cvtColor(screenshot, cv.COLOR_BGR2GRAY)
       # 反向阈值@ 100
       screenshot = cv.cuda.threshold(screenshot, 125, 255, cv.THRESH_BINARY)
       # 调整图像
       screenshot = cv.cuda.resize(screenshot[1], (200, 200))
       
       # 从GPU下载图像 (cv2.cuda_GpuMat -> numpy.ndarray)
       screenshot = screenshot.download()
       # 用新图像
       i_files[i] = screenshot
   
   # 输出预处理图像
   return i_files

添加了另一个.cvtColor()来灰度化图像,并将反转的二进制阈值切换为二进制阈值。我们现在可以使用compute()来进行计算了;from dask import compute

img_files = ['bear.png', 'drip.png', 'tldr.png', 'frog.png']

img_files_2 = ['apple.png', 'eye.png', 'window.png', 'blinds.png']

# 设置延迟

set_a = dask.delayed(preprocess)(img_files)

set_b = dask.delayed(preprocess)(img_files_2)

# 开始计算

out_a, out_b = compute(*[set_a, set_b])

结果

【深几度·产业数字化】撰稿|吴俊宇「摘要:对行业而言,百度地图在当下的角色转变具备代表性意义。这是产业数字化浪潮下的一次成功转型。在过去移动生态下诞生的产品,在今天都值得深入挖掘其中的数据价值,这些价值可以延展至国民经济、产业客户的实际诉求之中。」2020年是技术渗入生活和产业的一年。新冠疫情催化了企业对AI产品解决方案的诉求。“新基建”政策倡导加速了这一进程。诸多移动时代产品在疫情下展现了平台化能力。这些能力对社会、产业起到了支撑作用。百度地图是其中的案例之一。它在新冠疫情中曾利用技术能力测算人口迁徙、复工复产数据,对政府、企业疫情相关决定起到了一定的影响。这些能力得以发掘后,百度地图进一步......Next article READ