使用Azure认知服务快速搭建一个目标检测平台
文章目录
- 前言
- 1. 认知服务
- 2. 环境配置
- 2.1 创建资源
- 2.2 创建python环境
- 3. 代码实现
- 3.1 图片检测
- 3.2 视频检测
- 4. 检测效果
- 结束语
前言
博主参与了由CSDN
和微软共同举办的0元试用Azure人工智能认知服务的活动,体验了一下Azure
的计算机视觉方面的服务,在这里记录一下如何基于Azure
计算机视觉服务快速搭建一个目标检测平台。
1. 认知服务
认知服务使每个开发人员和数据科学家都可以使用 AI
。借助领先的模型,可以解锁各种用例。只需要一个 API
调用,就可以将看、听、说、搜索、理解和加快高级决策制定的能力嵌入到应用中。让所有技能水平的开发人员和数据科学家都能轻松在其应用中添加 AI
功能。
Azure认知服务简介
Azure
的计算机视觉服务具体包括以下服务:
服务 | 说明 |
---|---|
光学字符识别 (OCR)
|
光学字符识别 (OCR) 服务从图像中提取文本, 可以使用新读取 API 从图像和文档中提取印刷体文本和手写文本。 此 API 使用基于深度学习的模型,并处理各种表面和后台上的文本,包括业务文档、发票、收据、海报、名片、信件和白板,并且支持提取多种语言的印刷体文本 |
图像分析
|
图像分析服务从图像中提取许多视觉特征,例如对象、人脸、成人内容和自动生成的文本说明 |
空间分析
|
空间分析服务会分析视频源上人员的状态和移动,并生成其他系统可以响应的事件 |
本篇主要介绍的是图像分析服务中的目标检测功能。Azure的计算机视觉服务对输入图像的要求如下:
- 图像文件格式必须是
JPEG
、PNG
、GIF
或BMP
- 图像的文件大小不能超过
4 MB
- 图像的尺寸必须大于
50 x 50
像素,对于读取API
,图像的尺寸必须介于50 x 50
和10000 x 10000
像素之间。
2. 环境配置
2.1 创建资源
按照下图所示步骤来添加计算机视觉所需要的资源:
创建完毕后,进入资源可以看到自己的终结点endpoint
和密钥subscription key
:
2.2 创建python环境
# 安装Azure Computer Vision库pip install --upgrade azure-cognitiveservices-vision-computervision# 安装pillow库pip install pillow# 安装 matplotlib库pip install matplotlib# 安装opencv库pip install opencv-python# 安装ffmpeg库pip install ffmpeg
3. 代码实现
3.1 图片检测
from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from azure.cognitiveservices.vision.computervision.models import OperationStatusCodes
from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes
from msrest.authentication import CognitiveServicesCredentialsfrom PIL import Image
import matplotlib.patches as patches
import matplotlib.pyplot as plt
import numpy as np
import cv2
import globsubscription_key = "xxxxxxxxxxx" # your subscription key
endpoint = "https://xiaxiaoyou-detection.cognitiveservices.azure.cn/" # your endpoint# create computer vision client
computervision_client = ComputerVisionClient(endpoint, CognitiveServicesCredentials(subscription_key))# test image
img_file = 'iu.png'print("===== Detect Objects - local =====")
# Get local image with different objects in it
local_image_objects = open(img_file, "rb")# Call API with local image
detect_objects_results_local = computervision_client.detect_objects_in_stream(local_image_objects)object_dict = {}
count = 0
# Print detected objects results with bounding boxes
print("Detecting objects in local image:")
if len(detect_objects_results_local.objects) == 0:print("No objects detected.")
else:for object in detect_objects_results_local.objects:# print(object)object_dict[count] = {'object_property': object.object_property,'rectangle': [(object.rectangle.x, object.rectangle.y), object.rectangle.w, object.rectangle.h],'confidence': object.confidence}count += 1print("object at location {}, {}, {}, {}".format(object.rectangle.x, object.rectangle.x + object.rectangle.w,object.rectangle.y, object.rectangle.y + object.rectangle.h))# create random color
colors = plt.cm.hsv(np.linspace(0, 1, 10)).tolist()img = Image.open(img_file)fig = plt.figure()
plt.imshow(img)
plt.axis('off')
currentAxis = plt.gca()color_dict = {}
for i, info in enumerate(object_dict.items()):print(info)color = color_dict.get(info[1]['object_property'], None)if not color:color = colors[i]color_dict[info[1]['object_property']] = colorrect = patches.Rectangle(*info[1]['rectangle'], edgecolor=color, linewidth=3, fill=False)currentAxis.add_patch(rect)currentAxis.text(info[1]['rectangle'][0][0], info[1]['rectangle'][0][1], info[1]['object_property'] + ' ' + str(info[1]['confidence']),color='white', size=20, weight='bold', backgroundcolor=color, family='cursive')# remove blank
fig.set_size_inches(img.size[0]/100, img.size[1]/100)
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.subplots_adjust(top=1, bottom=0, left=0, right=1, hspace=0, wspace=0)
plt.margins(0, 0)
plt.savefig('object-detection-iu.png')
plt.show()
3.2 视频检测
相比图片检测,视频检测多了两个视频转图片和图片转视频的操作,具体如下:
def toimg(video_file):if not os.path.exists('imgs'):os.mkdir('imgs')cap = cv2.VideoCapture(video_file)isopened = cap.isOpenedfps = cap.get(cv2.CAP_PROP_FPS) # 帧率width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))print('fps: {0}, width: {1}, height: {2}'.format(fps, width, height))i = 0while isopened:if i == 1000:break(flag, frame) = cap.read() # 读取每一张 flag framefilename = 'imgs/' + str(i).zfill(5) + '.png'if flag == True:cv2.imwrite(filename, frame, [cv2.IMWRITE_JPEG_QUALITY, 100])i += 1cap.release()def tovideo(img_path):if not os.path.exists('video'):os.mkdir('video')fourcc = cv2.VideoWriter_fourcc(*'mp4v')videoWrite = cv2.VideoWriter('video/iu.mp4', fourcc, 30, (1920, 1080))files = sorted(glob.glob(os.path.join(img_path, '*.png')))for file in files:img = cv2.imread(file)videoWrite.write(img)videoWrite.release()
4. 检测效果
博主测试了几张图片,效果还是非常不错的:
德鲁纳酒店-目标检测
结束语
总体感觉检测的准确率还是挺高的,虽然不知道Azure
基于的什么模型,但就某些细节来看,种类还挺丰富,比如上述图片的牛仔裤
,视频中IU的唇膏(化妆品)
都可以检测到,而且速度也很棒,可能这就是商用的叭,很不戳!!!!
使用Azure认知服务快速搭建一个目标检测平台相关推荐
- 如何快速搭建一个社交网站平台?
2019独角兽企业重金招聘Python工程师标准>>> 截至到2017年12月,我国的网民规模已经达到了7.72亿,而手机网民规模也达7.53亿,2017年网络社交娱乐类应用用户规模 ...
- 睿智的目标检测35——Pytorch搭建YoloV4-Tiny目标检测平台
睿智的目标检测35--Pytorch搭建YoloV4-Tiny目标检测平台 学习前言 什么是YOLOV4-Tiny 代码下载 YoloV4-Tiny结构解析 1.主干特征提取网络Backbone 2. ...
- 睿智的目标检测39——TF2搭建YoloV4-Tiny目标检测平台(tensorflow2)
睿智的目标检测39--TF2搭建YoloV4-Tiny目标检测平台(tensorflow2) 学习前言 什么是YOLOV4-Tiny 代码下载 YoloV4-Tiny结构解析 1.主干特征提取网络Ba ...
- 睿智的目标检测30——Pytorch搭建YoloV4目标检测平台
睿智的目标检测30--Pytorch搭建YoloV4目标检测平台 学习前言 什么是YOLOV4 代码下载 YOLOV4改进的部分(不完全) YOLOV4结构解析 1.主干特征提取网络Backbone ...
- 睿智的目标检测32——TF2搭建YoloV4目标检测平台(tensorflow2)
睿智的目标检测32--TF2搭建YoloV4目标检测平台(tensorflow2) 学习前言 什么是YOLOV4 代码下载 YOLOV4改进的部分(不完全) YOLOV4结构解析 1.主干特征提取网络 ...
- 目标检测学习————Keras搭建yolo3目标检测平台
Keras搭建yolo3目标检测平台 源码下载 yolo3实现思路 一.预测部分 二.训练部分 训练自己的yolo3模型 参考原文出处 点击进入https://blog.csdn.net/weixin ...
- 睿智的目标检测18——Keras搭建Faster-RCNN目标检测平台
睿智的目标检测18--Keras搭建FasterRCNN目标检测平台 学习前言 什么是FasterRCNN目标检测算法 源码下载 Faster-RCNN实现思路 一.预测部分 1.主干网络介绍 2.获 ...
- 睿智的目标检测61——Pytorch搭建YoloV7目标检测平台
睿智的目标检测61--Pytorch搭建YoloV7目标检测平台 学习前言 源码下载 YoloV7改进的部分(不完全) YoloV7实现思路 一.整体结构解析 二.网络结构解析 1.主干网络Backb ...
- 神经网络学习小记录50——Pytorch 利用efficientnet系列模型搭建yolov3目标检测平台
神经网络学习小记录50--Pytorch 利用efficientnet系列模型搭建yolov3目标检测平台 学习前言 什么是EfficientNet模型 源码下载 EfficientNet模型的实现思 ...
最新文章
- 不使用fastreport自带的条码组件打印快递单(一款很不错的条码组件下载)
- 用友 U9 怎么样???
- 【 FPGA 】时钟域问题简介
- 数据挖掘中分类算法小结
- 如果MySQL的自增 ID 用完了,怎么办?
- Android 破解之道 (二)
- Android 5.x Theme 与 ToolBar 实战
- Kettle安装好MYSQL驱动后报用户名密码错误
- 23种设计模式之桥梁模式
- es6 实例:使用Proxy实现观察者模式
- 新生代的他们,正在续写“黑客”传奇
- paper reading:[第一代GCN] Spectral Networks and Deep Locally Connected Networks on Graphs
- 创建线程的3种方式,线程池的参数详解
- html字体播放,Html 字体
- 电商系统如何搭建会员体系/会员制玩法?
- 硅基生命之漫谈-1:天马行空
- 神农班和我的2020年总结
- 四年磨一剑:我是如何拿到蚂蚁offer的?
- 巴比特 | 元宇宙每日必读:工业元宇宙究竟是什么,为何它值得被追捧?
- vue报错:Not Found - GET https://registry.npmjs.org/- Not found
热门文章
- 使用华为hd255进行路由中继
- TCP和UDP的介绍及使用场景
- mockjs使用方法详解
- 怎么下载lce_飞冰ICE官方下载|阿里飞冰ice(Iceworks)下载 v2.15.0 官方版_最火软件站...
- [转载红鱼儿]kbmmw 开发点滴:TkbmMWLock用法
- Kotlin DSL
- linux手写软件,Write一款梦幻般的Linux手机笔记应用程序
- hadoop框架中怎么来优化
- 神奇的模板元编程——TMP
- 【文心一言 vs. 通义千文】一言对千问:自百度之后,阿里终于还是出手了——通义千问