Python:处理cv2模块putText中文无法识别问题

2023-05-16

简介:在cv2中,目前putText函数中文是无法直接使用的,需要进行一点的转换。解决办法为通过PIL模块重新封装一个函数,直接调用。

如图:???
图片

通过PIL模块改造:new_put_text.py

# coding=utf-8
# cv2解决绘制中文乱码
import cv2.cv2 as cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont


def cv2_chinese_text(img, text, position, textColor=(0, 255, 0), textSize=30):
    if (isinstance(img, np.ndarray)):  # 判断是否OpenCV图片类型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    # 创建一个可以在给定图像上绘图的对象
    draw = ImageDraw.Draw(img)
    # 字体的格式
    fontStyle = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8")
    # 绘制文本
    draw.text(position, text, textColor, font=fontStyle)
    # 转换回OpenCV格式
    return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)

main.py:

# coding=utf-8
import cv2.cv2 as cv2
import os
from new_put_text import cv2_chinese_text

# 加载训练数据集文件
recogizer = cv2.face.LBPHFaceRecognizer_create()
recogizer.read('TrainingDataSet.yml')
names = []


# 准备识别的图片
def face_detect_demo(img):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转换为灰度
    face_detector = cv2.CascadeClassifier(

        r'D:\xxxx\venv\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
    face = face_detector.detectMultiScale(gray, 1.1, 3, cv2.CASCADE_SCALE_IMAGE, (50, 100), (300, 300))
    for x, y, w, h in face:
        cv2.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
        cv2.circle(img, center=(x + w // 2, y + h // 2), radius=w // 2, color=(0, 255, 0), thickness=1)
        # 人脸识别
        print(f"names:{names}")
        ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])
        print(f"confidence:{confidence}")
        if confidence > 70:
            cv2.putText(img, 'unKnow', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
        else:
            img = cv2_chinese_text(img, str(names[ids - 1]), (x + 10, y - 10), (0, 255, 0), 25)
    cv2.imshow('result', img)


def name():
    path = r'D:\xxxxx\person_face'
    imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
    for imagePath in imagePaths:
        name = str(os.path.split(imagePath)[1].split('.', 2)[1])
        names.append(name)


cap = cv2.VideoCapture('01093.mp4')

name()
while True:
    flag, frame = cap.read()
    if not flag:
        break
    face_detect_demo(frame)
    if ord(' ') == cv2.waitKey(10):
        break
cv2.destroyAllWindows()
cap.release()
print(names)

注意事项:如果使用原有的内容,需要对原有图片全部改中文名

如:1.白展堂.jpg 然后重新执行训练集。

图片

运行结果:

图片

此时再次识别,就可以展示出中文。

微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:处理cv2模块putText中文无法识别问题 的相关文章

随机推荐

  • ffmpeg 转jpg文件为rgb32格式的文件

    ffmpeg i 1 jpg vcodec rawvideo pix fmt rgba raw1 rgb 1 jpg 需要转换的原始文件 rgba bgra rgba格式转换 raw1 rgb 转换完成输出的文件名 xff08 注 xff1
  • vbox下安装archlinux

    从 http mirrors ustc edu cn archlinux iso 下载archlinux 在vbox中启动安装介质 xff0c 默认关闭uefi 一路默认 xff0c 一直到磁盘分配 输入 span class hljs p
  • openstack zun源码分析

    容器服务启动过程 项目包括三个服务 xff0c 分别是zun api xff0c zun wsproxy xff0c zun compute xff0c 均使用systemctl来管理启动停止 xff0c 相关的服务文件如 zun api
  • 有效解决Ubuntu18.04无法联网问题

    网络配置 虚拟机的网络适配器的模式有两种 xff1a 桥接模式 xff1a 使得虚拟机拥有跟物理机一样的IP地址 NAT模式 xff1a 使得虚拟机直接共享物理机的IP xff0c 自己本身没有独立的IP地址 这两种模式选择在 以上两种模式
  • 5分钟带你了解音视频开发

    前言 想赚钱 xff0c 第一点就得选对自己的方向 xff0c 有的行业和领域 xff0c 无论你如何努力 xff0c 天花板也不过如此 选对时代的风口 xff0c 就算是头猪都能被吹上天 xff0c 今天我们就来聊聊音视频开发 蓬勃发展的
  • C# 学习笔记(一)-- C# 语言和 .NET 框架

    从今天开始 xff0c 在这里记录重新学习 C 的学习笔记 导语 之前曾经自学过一段时间的 C xff0c 也写过一些 WinForm 的小工具 个人认为 C 是我所见过的用法最为优雅 xff0c 使用起来最为舒服的语言 xff0c 因此便
  • Ubuntu 添加开机/关机执行脚本与service的理解

    最近碰到一个需求是需要在ubuntu中插入一个关机脚本 xff0c 在系统关机之前执行它 在网上浏览了很多资料 xff0c 但是没有切实可行的方法 xff0c 大多数的博客都是比较陈旧的方法 xff0c 可能已经不适用于最新的ubuntu1
  • Linux 进程间通信基础(四)--fifo管道

    最近正好有一些空余时间 xff0c 在这里总结一下曾经使用过的Linux进程间通信的几种方法 xff0c 贴出来帮助有需要的人 xff0c 也有助于自己总结经验加深理解 上一次我们梳理了pipe管道的相关知识 xff0c 这一次梳理fifo
  • 利用二进制文件制作自己的Debian软件安装包

    在使用Ubuntu系统的时候 xff0c 我们已经习惯了使用Debian风格的软件安装方式 即使用apt get install命令安转或dpkg i deb的方式安装debena软件包 但有时程序没有放到Ubuntu的源服务器上且不提供d
  • Tortoise Git 克隆出现"fatal: Authentication failed for"

    使用Tortoise Git克隆时出现 34 fatal Authentication failed for 34 的错误 xff0c 并且他还不让你输入用户名和密码 xff0c 寻找了许多办法 xff0c 看到最多的是在Git Bash中
  • 怎么解决 接口请求 504 Gateway Time-out

    HTTP 504 Gateway Timeout 错误通常是由于网关或代理服务器无法在规定的时间内从上游服务器接收到响应而导致的 这可能是由于上游服务器过载或网络问题导致的 要解决此问题 xff0c 可以尝试以下步骤 xff1a 检查上游服
  • WSL无法使用npm

    报错信息 root 64 DESKTOP U2RC2DU npm bash mnt c Program Files nodejs npm bin sh M bad interpreter No such file or directory
  • HDU 3700 Line belt

    Line belt Time Limit 2000 1000 MS Java Others Memory Limit 32768 32768 K Java Others Total Submission s 3669 Accepted Su
  • Ubuntu中使用framebuffer的方法

    打开 etc initramfs tools modules文件 xff0c 在末尾加上 xff1a fbcon vesafb 打开 etc modprobe d blacklist framebuffer xff0c 找到 blackli
  • html5.超链接标签,图片标签

    lt a gt 超链接标签 a标签常用的属性 xff1a href 用于指定链接的资源 target 设置打开新资源的目标 Blank 在独立的窗口上打开新资源 self 在当前窗口打开新资源 file file协议 xff08 文件协议
  • ubuntu22.04 搭建 Pytorch环境

    关于电脑 第一步 安装anaconda 1 进入官网 链接 anaconda 2 下载linux的sh版 3 在对应位置输入 span class token function sh span 文件名 sh 4 选择 yes 5 选择no
  • opencv的ORB特征(slambook2 orb_cv.cpp代码详解)

    ORB特征提取与匹配 slambook2 ch7 orb cv cpp 1 头文件 span class token macro property span class token directive hash span span clas
  • Debian安装nodejs

    安装指定版本nodejs xff0c 以18 X版本为例 1 通过curl命令向系统中添加NodeSource存储库 curl sL https deb nodesource com setup 18 x bash xff08 如果提示 c
  • pip安装第三方库全攻略:普通安装、安装whl后缀文件、使用国内镜像安装

    简介 xff1a pip 是 Python 的包安装程序 其实 xff0c pip 就是 Python 标准库 xff08 The Python Standard Library xff09 中的一个包 xff0c 只是这个包比较特殊 xf
  • Python:处理cv2模块putText中文无法识别问题

    简介 xff1a 在cv2中 xff0c 目前putText函数中文是无法直接使用的 xff0c 需要进行一点的转换 解决办法为通过PIL模块重新封装一个函数 xff0c 直接调用 如图 xff1a 通过PIL模块改造 xff1a new