[D09] OpenCV 应用范围

我们现在已经知道 OpenCV 可以拿来处理影像,这样的成效又适用在什麽领域? 或是能对生活有什麽帮助吗?

像是近两年新型冠状病毒的疫情越演越烈,出入各个场所人人都必须戴着口罩,如果单靠人力控管,一定会有所疏失,我们这时就能配合 AI 的使用
辨识物件的系统,自动侦测到未戴口罩的民众,并增加辨识上的精确度。

图像辨识&物件侦测

我们之所以能够辨别物体的不同,是因为我们可以透过学习该物体的特徵,例如猫&狗:

因此在图形辨识很重要的步骤是必须建立特徵分类器
cv2.CascadeClassifier

记得要先下载 haarcascade 的模型 .xml 档 !

faceClassi = cv2.CascadeClassifier(cascPath)

再来是侦测图片 → 用detectMultiScale函数检测,调整函数的参数使检测结果更加精确!

faces = faceCascade.detectMultiScale( gray,  scaleFactor=1.12  ,  minNeighbors=5,  
minSize=(30, 30),  flags = cv2.cv.CV_HAAR_SCALE_IMAGE )
  • gray代表是灰阶图片
  • scaleFactor是图像的缩放比例
  • minNeighbors针对目标进行检测的次数
  • minSize检测目标的最小尺寸

scaleFactor,minNeighbors,minSize数值大小将影响辨识结果,须依状况进行调整

接下来将检测到的人脸(或物体)框出来~!
以下使用 cv2.rectangle 函数画方框。

  • 第一个参数是要动作的影像
  • 第二个参数是顶点座标
  • 第三个参数是对向顶点座标
  • 第四个参数是框框的颜色(Blue,Green,Red)
  • 第五个参数是线条的宽度
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

x, y, w, h 是图像物件要被框出时很重要的座标
(x,y)是左上角的座标, w 是宽度, h 则是高度

最後再显示图片就大功告成了!

cv2.imshow('My Image', img)

cv2.waitKey(0)                      
cv2.destroyAllWindows()      

实际执行结果:


<<:  [DAY9] Boxenn 实作 Entity 与 Value Object

>>:  #09 No-code 之旅 — 怎麽在 Client-side 抓取资料?SWR 简介

Trouble with Distributed Systems (4-2) - System Model & Summary

续 Day 12 今天的特别理论和抽象,所以懒得看就跳过吧! 系统模型和现实 (System Mo...

为了转生而点技能-JavaScript,day23(Promise介绍

Promise:适用於非同步的运算上。 本身就是建构函式 console.log(Promise);...

[Day 23] 自定义 ColumnType, Operator, Expression 扩展 Exposed Query DSL API

ORM 框架可以让开发者专注於物件的 CRUD 操作,不必直接思考 SQL 要怎麽写。如果是新增、修...

Docker Debug 挑战题 - 网页跑板了!? 小容器 我要进来罗

这边为一道设计过的 Docker Debug 挑战题目,初始环境有所设置错误,请大家帮忙找出 Do...

在 Fedora 34 上安装 VirtualBox 6.1.26

我整理一下自己的安装步骤如下: 一、升级 Kernel sudo -i dnf check-upd...