PicoDet + PP-TinyPose做头肩证件照构图验证
·
这个需求就是要求对用户上传的个人照片进行校验,就是照片里面必须是一个人的照片,判断有没有人脸、双肩、单人、构图是否合格,目前没有做活体检测 / 防翻拍、身份比对(是不是本人)、正脸认证级别的公安核验这些,当然在当前这套架构上是可以实现的,所以需要这个的大家就自己继续深入研究,我这边的需求只需要判断用户上传的照片是正常的单人照片即可。
环境搭建这里就不重复了,大家可以参照我上一个需求记录 PaddleOCR 做证件识别(身份证、银行卡等) ,这个在前面的基础上继续加了一点东西就实现了,因为用的是同一套体系,所以做起来不是很复杂。
首先如果大家和我一样用的 Docker 实现的建议先固化一下当前镜像,防止后续出错可以快速还原环境,这也是 Docker 的一大优点
docker commit ocr-server ocr-server:v1
# 这里我们直接本地下载再上传,我在服务器上下载总中断,网络很不稳定
https://github.com/PaddlePaddle/PaddleDetection/archive/refs/heads/release/2.6.zip
# 直接在宿主机操作,因为和 Docker 容器做了映射
cd /data/ai/apps
unzip PaddleDetection-release-2.6.zip
mv PaddleDetection-release-2.6 PaddleDetection
# 检查文件是否正常解压
ls PaddleDetection/deploy/python/infer.py
# 直接宿主机操作
mkdir -p /data/ai/apps/ocr-service/models
cd /data/ai/apps/ocr-service/models
cd /data/ai/apps/ocr-service
# 人体检测 PicoDet
https://bj.bcebos.com/v1/paddledet/models/keypoint/picodet_s_320_pedestrian.tar
# 关键点 TinyPose
https://bj.bcebos.com/v1/paddledet/models/keypoint/tinypose_256x192.tar
tar -xf picodet_s_320_pedestrian.tar
tar -xf tinypose_256x192.tar
# 检查文件是否正常解压
ls /data/ai/apps/ocr-service/models/picodet_s_320_pedestrian/infer_cfg.yml
ls /data/ai/apps/ocr-service/models/tinypose_256x192/infer_cfg.yml
然后这里注意,为了方便后续项目对接使用我这边直接封装了一个 Python 服务,所以大家需要代码的自己去拉一下 ocr-service
部署很简单,就是把目录里面的文件放到服务器上,然后执行脚本就可以了,目录如下
注意只需要执行 deploy.sh 脚本就可以启动了 (这里针对的是 Docker 容器,如果本身就是 Ubuntu22.04 + 就没这么麻烦,自己修改一下启动脚本即可)
(base) [root@ecm-957e ocr-service]# sh deploy.sh
===== 2026-06-17 15:29:43 开始发布 =====
1. 停止旧容器...
ocr-server
2. 删除旧容器...
ocr-server
3. 启动新容器...
e0189be0c18ff9cfdc0c188ea3bf1076b9c3d1de1838c409dcbc81f696176c1c
4. 等待服务启动...
5. 健康检查通过:
{"status":"ok","service":"nh-ocr-service"}
日志目录:/data/ai/apps/ocr-service/logs
- ocr-service.log 服务/错误日志
- access.log 访问日志
===== 发布完成 =====
测试也很简单
(base) [root@ecm-957e ~]# curl -X POST http://127.0.0.1:8088/validate/portrait -F "file=@/data/ai/upload/test/111.png"
{"code":200,"success":true,"data":{"passed":false,"reason":"FACE_NOT_VISIBLE","message":"未清晰检测到面部,请正面对准引导框","person_count":1,"details":{"low_score_keypoints":[0,1,2,5,6]}}}
(base) [root@ecm-957e ~]# curl -X POST http://127.0.0.1:8088/validate/portrait -F "file=@/data/ai/upload/test/555.jpg"
{"code":200,"success":true,"data":{"passed":true,"reason":null,"message":"构图合格","person_count":1,"details":{"face_height_ratio":0.3214,"person_height_ratio":0.4201,"mean_keypoint_score":0.3446}}}
后续我们其它服务直接调用对应的接口就可以了
更多推荐



所有评论(0)