有能在本地运行,扫描图片中是否有人物/人脸的工具嘛

2023-12-05 04:15:29 +08:00
 ne6rd

需求: 本地运行,不依赖网络服务 Windows 环境 扫描某个文件夹下的所有 jpg/png 照片,分辨率大概从 800px 到 4000px 都有可能,检测是否主要拍摄对象是人物/人脸 硬件是 5800x+3060ti ,效率要能接受

请问目前的技术可能嘛?现成的或者需要哪些开源库可以自己撸一个?有没有 c#支持的,还是说这方面必须要 python

1812 次点击
所在节点    问与答
13 条回复
ne6rd
2023-12-05 04:57:40 +08:00
问了 chatgpt ,给了几行代码好像就解决问题了,真香。
```
import cv2

# Load pre-trained Haar cascade classifier for human detection
human_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_fullbody.xml')

# Read the image
image = cv2.imread('C:\\~\\code\\py\\human_detect\\img\\none.jpg')

# Convert the image to grayscale
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect human bodies in the image
humans = human_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)

if len(humans) > 0:
print("Human detected!")
else:
print("No humans detected.")
```
ne6rd
2023-12-05 07:15:36 +08:00
然而 haarcascades 检测效果不太行, 也可能是参数调的不对。
Muniesa
2023-12-05 07:49:21 +08:00
有好几个 XML ,可以都试试
tyzandhr
2023-12-05 07:57:40 +08:00
OpenCV
wph95
2023-12-05 08:23:44 +08:00
mediapipe
SeaRecluse
2023-12-05 09:39:10 +08:00
与 New Bing 对话:
给我是一个使用 insightface 库和 opencv 的 python 脚本对一个文件下的所有图片进行检测,如果图片里有包含人脸,就单独复制到一个文件夹里,加上进度条显示

```
import os
import cv2
import shutil
import insightface
from tqdm import tqdm

# 初始化模型
model = insightface.app.FaceAnalysis()

# 加载模型
ctx_id = -1
model.prepare(ctx_id = ctx_id)

# 源文件夹和目标文件夹
src_dir = 'src_dir'
dst_dir = 'dst_dir'

# 获取源文件夹中的所有图片
images = [f for f in os.listdir(src_dir) if os.path.isfile(os.path.join(src_dir, f))]

# 创建目标文件夹
os.makedirs(dst_dir, exist_ok=True)

# 遍历所有图片
for image in tqdm(images, desc="Processing images"):
img_path = os.path.join(src_dir, image)
img = cv2.imread(img_path)

# 使用模型检测人脸
faces = model.get(img)

# 如果检测到人脸,将图片复制到目标文件夹
if faces:
print(img_path)
shutil.copy(img_path, dst_dir)

```
tool2d
2023-12-05 09:39:31 +08:00
以前我做过相关调研,很多算法只能统计正脸效果,两个眼睛一个鼻子那种。

但是需求方说,还要统计后脑勺,这就有点难度了。
SeaRecluse
2023-12-05 09:59:49 +08:00
@tool2d 你的需求方要的是人头检测,而你找的算法是人脸检测当然不行喽。人头检测是从人形检测中分出来的子任务。
x86
2023-12-05 10:04:26 +08:00
什么库可以做到这种效果
isquare
2023-12-05 11:57:13 +08:00
AI 人脸检测都快做到头了,没必要用传统检测算法了

检测只是大多数人脸人物的第一步,就比如这个项目: https://github.com/ageitgey/face_recognition/blob/master/README_Simplified_Chinese.md ,调一个接口检测人脸,只不过用的 dlib ,检测亚洲人效果一般

还有很多国内开源项目,比如 https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.7/deploy/README.md

支持部署一个 server ,可以通过网络接口调用
mekopean
2023-12-05 12:02:13 +08:00
retinaface 或者
yolo 官网下个 pt -> from ultralytics import YOLO - > model = YOLO("cfgs/yolov8l.pt") -> results = model(image, conf=0.8)
ne6rd
2023-12-05 12:46:49 +08:00
目前测试 face_recognition 中,同样速度下,比 haarcascades 要准确多了
ne6rd
2023-12-05 13:40:31 +08:00
insightface 又远超 face_recognition 速度和准确度

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/997638

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX