物体侦测主要就做两件事情:
物体侦测算是一个相对成熟的技术,现在主要手段还是透过深度学习训练模型,在模型的训练过程中,会需要分析大量的影像与物体相对应的位置与标示,才能在训练结束後辨识影像中的物体。详细的物体辨识介绍有些复杂,这篇文章不一一解说。目前效果最好的物体辨识模型之一 YOLO- You Only Look Once,而且不断在进化,目前原作者认可的最新版本是 YOLOv4,其论文详细说明物体侦测的步骤,有兴趣的人可以到以下连结研究:
虽然物体侦测的模型有点复杂,但 Azure 有提供自己训练出来的模型提供大家使用,不需要看论文,也不需要懂原理,只要会用 API 就好,後续就是要教大家如何利用 Azure 电脑视觉服务来偷懒。
Python
套件需要用到以下套件:
azure-cognitiveservices-vision-computervision
Pillow
requests
import os
from io import BytesIO
import requests
from PIL import Image, ImageDraw, ImageFont
from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from msrest.authentication import CognitiveServicesCredentials
# 汇入必要套件,主要都是跟读档、绘图和 Azure 的相关套件
# 一开始除了汇入套件以外,还需要利用金钥SUBSCRIPTION_KEY和端点ENDPOINT,取得使用电脑视觉服务的权限。
SUBSCRIPTION_KEY = os.getenv("SUBSCRIPTION_KEY")
ENDPOINT = os.getenv("ENDPOINT")
CV_CLIENT = ComputerVisionClient(
ENDPOINT, CognitiveServicesCredentials(SUBSCRIPTION_KEY)
)
def main():
"""
Azure object detection
"""
# 透过图片的 URL 取得图片
url = "https://i.imgur.com/Js5H6Qa.jpg"
response = requests.get(url)
img = Image.open(BytesIO(response.content))
# 开始设定绘图相关的部分,由於会需要在图片上写字,需要准备字型档
draw = ImageDraw.Draw(img)
font_size = int(5e-2 * img.size[1])
fnt = ImageFont.truetype("../static/TaipeiSansTCBeta-Regular.ttf", size=font_size)
# 透过电脑视觉的功能取得物件,侦测的结果会包含匡出物体的左上角座标(x, y),以及方匡的宽跟高(w, h),过这四个值即可画出方匡,并且标示辨识结果以及辨识的信心程度。
object_detection = CV_CLIENT.detect_objects(url)
if len(object_detection.objects) > 0:
for obj in object_detection.objects:
left = obj.rectangle.x
top = obj.rectangle.y
right = obj.rectangle.x + obj.rectangle.w
bot = obj.rectangle.y + obj.rectangle.h
name = obj.object_property
confidence = obj.confidence
print("{} at location {}, {}, {}, {}".format(name, left, right, top, bot))
draw.rectangle([left, top, right, bot], outline=(255, 0, 0), width=3)
draw.text(
[left, top + font_size],
"{0} {1:0.1f}".format(name, confidence * 100),
fill=(255, 0, 0),
font=fnt,
)
# 最後存档
img.save("output.png")
print("Done!")
print("Please check ouptut.png")
if __name__ == "__main__":
main()
由於目前 Azure 电脑视觉的功能都只能输入图片的 URL,无法从自己的电脑输入图片,所以必须要找个地方上传图片,以便取得 URL。接下来,我们可以利用 Azure Blob 来取得图片的连结。
前言 这系列文章建议在有Flutter基础的能力後在观看,会比较好理解,关於Flutter 的介绍可...
今天我选择了"Dev-C++" 来当我学习C++的入门开发环境! 会想下载Dev...
前言 这篇适合给first time leader,特别是刚被promote成team leade...
电风扇 ( 控制强度 ) 教学原文参考:电风扇 ( 控制强度 ) 这篇文章会介绍,如何在 Scrat...
现在每次启动专案,预设路径都会是/,但我们目前没有Component套用这个路由,要自己切换到Pos...