在go语言中检测照片中人脸或车辆的数量
Go  /  管理员 发布于 1年前   242
如何使用 OpenCV 检测图像中人脸数量,在开发涉及计算机视觉的机器学习功能时,了解给定照片中的人脸数量至关重要。
例如
1) 机器人需要知道为多少人提供水杯。
2) 无人驾驶汽车需要知道有多少辆车驶入以及车内乘客的人数。
如果驾驶座位置有人脸,那么来车就有可能正在行驶。
在本示例中,我们将学习如何使用命令行 Golang 程序检测人脸数量并报告该数量。
如果您想检测汽车,请使用 HAAR 级联文件进行车辆检测,或从
https://github.com/abhi-kumar/CAR-DETECTION/blob/master/checkcas.xml
或
http://cogcomp.cs.illinois.edu/Data/Car/ 下载 XML 文件。
如果您需要检测更具体的数据,如眼睛、耳朵等。
请使用
https://github.com/opencv/opencv/tree/master/data/haarcascades
上的级联文件。
示例代码:
package main
import (
"fmt"
"github.com/lazywei/go-opencv/opencv"
"image"
gif "image/gif"
_ "image/jpeg"
_ "image/png"
"net/http"
"os"
)
// 全局变量
var (
cascade = new(opencv.HaarCascade)
)
func errCheck(err error) {
if err != nil {
panic(err)
}
}
func main() {
if len(os.Args) != 2 {
fmt.Printf("Usage : %s <imagefilename>\n", os.Args[0])
os.Exit(0)
}
imageFileName := os.Args[1]
fmt.Println("分析 [" + imageFileName + "]......")
// 我们将使用 Go 的加载图像方法
// 而不是 openCV.LoadImage
// 因为我们要检测用户是否提供了 GIF 动画
imageFile, err := os.Open(imageFileName)
errCheck(err)
defer imageFile.Close()
img, _, err := image.Decode(imageFile)
errCheck(err)
buffer := make([]byte, 512)
imageFile.Seek(0, 0) // reset reader
_, err = imageFile.Read(buffer)
errCheck(err)
filetype := http.DetectContentType(buffer)
// 检查图像是否为 GIF,如果是,则通过以下方式检查图像是否为 GIF 动画
// 计算循环次数
fmt.Println("分析图像类型 : ", filetype)
if filetype == "image/gif" {
imageFile.Seek(0, 0)
// 如果图像是 GIF 动画,则发出警告
gif, err := gif.DecodeAll(imageFile)
errCheck(err)
if gif.LoopCount != 0 {
fmt.Println("检测到动画 gif。只会扫描第一帧中的人脸。")
}
}
// 用于车辆的 XML 文件
// see https://github.com/abhi-kumar/CAR-DETECTION/blob/master/checkcas.xml
// or http://cogcomp.cs.illinois.edu/Data/Car/
cascade = opencv.LoadHaarClassifierCascade("./haarcascade_frontalface_alt.xml")
defer cascade.Release()
// 将 Go 的 image.Image 类型转换为 OpenCV 的 IplImage(英特尔图像处理库)
openCVimg := opencv.FromImage(img)
defer openCVimg.Release()
if openCVimg != nil {
faces := cascade.DetectObjects(openCVimg)
fmt.Printf("在图像中检测到 [%v] 人脸.\n", len(faces)) // <------- here !
} else {
panic("OpenCV FromImage error")
}
}
输出
./detectfaces input.gif
分析 [input.gif]......
分析图像类型:image/gif
在图像中检测到 1 个面孔。
./detectfaces img.gif
分析 [img.gif]......
分析图像类型:image/gif
检测到动画 gif。只扫描第一帧中的人脸。
在图像中检测到 [0] 个面孔。
参考:
https://github.com/opencv/opencv/tree/master/data/haarcascades
http://docs.opencv.org/3.0-last-rst/doc/tutorials/objdetect/cascadeclassifier/cascadeclassifier.html#cascade-classifier
http://stackoverflow.com/questions/25775650/golang-async-face-detection
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号