文章目录

  • 前言
  • 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的计算机视觉服务对输入图像的要求如下:

  • 图像文件格式必须是 JPEGPNGGIFBMP
  • 图像的文件大小不能超过 4 MB
  • 图像的尺寸必须大于 50 x 50 像素,对于读取 API,图像的尺寸必须介于 50 x 5010000 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认知服务快速搭建一个目标检测平台相关推荐

  1. 如何快速搭建一个社交网站平台?

    2019独角兽企业重金招聘Python工程师标准>>> 截至到2017年12月,我国的网民规模已经达到了7.72亿,而手机网民规模也达7.53亿,2017年网络社交娱乐类应用用户规模 ...

  2. 睿智的目标检测35——Pytorch搭建YoloV4-Tiny目标检测平台

    睿智的目标检测35--Pytorch搭建YoloV4-Tiny目标检测平台 学习前言 什么是YOLOV4-Tiny 代码下载 YoloV4-Tiny结构解析 1.主干特征提取网络Backbone 2. ...

  3. 睿智的目标检测39——TF2搭建YoloV4-Tiny目标检测平台(tensorflow2)

    睿智的目标检测39--TF2搭建YoloV4-Tiny目标检测平台(tensorflow2) 学习前言 什么是YOLOV4-Tiny 代码下载 YoloV4-Tiny结构解析 1.主干特征提取网络Ba ...

  4. 睿智的目标检测30——Pytorch搭建YoloV4目标检测平台

    睿智的目标检测30--Pytorch搭建YoloV4目标检测平台 学习前言 什么是YOLOV4 代码下载 YOLOV4改进的部分(不完全) YOLOV4结构解析 1.主干特征提取网络Backbone ...

  5. 睿智的目标检测32——TF2搭建YoloV4目标检测平台(tensorflow2)

    睿智的目标检测32--TF2搭建YoloV4目标检测平台(tensorflow2) 学习前言 什么是YOLOV4 代码下载 YOLOV4改进的部分(不完全) YOLOV4结构解析 1.主干特征提取网络 ...

  6. 目标检测学习————Keras搭建yolo3目标检测平台

    Keras搭建yolo3目标检测平台 源码下载 yolo3实现思路 一.预测部分 二.训练部分 训练自己的yolo3模型 参考原文出处 点击进入https://blog.csdn.net/weixin ...

  7. 睿智的目标检测18——Keras搭建Faster-RCNN目标检测平台

    睿智的目标检测18--Keras搭建FasterRCNN目标检测平台 学习前言 什么是FasterRCNN目标检测算法 源码下载 Faster-RCNN实现思路 一.预测部分 1.主干网络介绍 2.获 ...

  8. 睿智的目标检测61——Pytorch搭建YoloV7目标检测平台

    睿智的目标检测61--Pytorch搭建YoloV7目标检测平台 学习前言 源码下载 YoloV7改进的部分(不完全) YoloV7实现思路 一.整体结构解析 二.网络结构解析 1.主干网络Backb ...

  9. 神经网络学习小记录50——Pytorch 利用efficientnet系列模型搭建yolov3目标检测平台

    神经网络学习小记录50--Pytorch 利用efficientnet系列模型搭建yolov3目标检测平台 学习前言 什么是EfficientNet模型 源码下载 EfficientNet模型的实现思 ...

最新文章

  1. 不使用fastreport自带的条码组件打印快递单(一款很不错的条码组件下载)
  2. 用友 U9 怎么样???
  3. 【 FPGA 】时钟域问题简介
  4. 数据挖掘中分类算法小结
  5. 如果MySQL的自增 ID 用完了,怎么办?
  6. Android 破解之道 (二)
  7. Android 5.x Theme 与 ToolBar 实战
  8. Kettle安装好MYSQL驱动后报用户名密码错误
  9. 23种设计模式之桥梁模式
  10. es6 实例:使用Proxy实现观察者模式
  11. 新生代的他们,正在续写“黑客”传奇
  12. paper reading:[第一代GCN] Spectral Networks and Deep Locally Connected Networks on Graphs
  13. 创建线程的3种方式,线程池的参数详解
  14. html字体播放,Html 字体
  15. 电商系统如何搭建会员体系/会员制玩法?
  16. 硅基生命之漫谈-1:天马行空
  17. 神农班和我的2020年总结
  18. 四年磨一剑:我是如何拿到蚂蚁offer的?
  19. 巴比特 | 元宇宙每日必读:工业元宇宙究竟是什么,为何它值得被追捧?
  20. vue报错:Not Found - GET https://registry.npmjs.org/- Not found

热门文章

  1. 使用华为hd255进行路由中继
  2. TCP和UDP的介绍及使用场景
  3. mockjs使用方法详解
  4. 怎么下载lce_飞冰ICE官方下载|阿里飞冰ice(Iceworks)下载 v2.15.0 官方版_最火软件站...
  5. [转载红鱼儿]kbmmw 开发点滴:TkbmMWLock用法
  6. Kotlin DSL
  7. linux手写软件,Write一款梦幻般的Linux手机笔记应用程序
  8. hadoop框架中怎么来优化
  9. 神奇的模板元编程——TMP
  10. 【文心一言 vs. 通义千文】一言对千问:自百度之后,阿里终于还是出手了——通义千问