AI图像识别初次尝试

news2025/4/16 11:39:50

1.人形识别结果

2.代码

python+OpenCV+yolov3训练库,代码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import os

imgFiles=["pic03.jpg", "pic04.jpg"]

net=None
classes=None
colors=None

def recog_person(imgFile, ratio):
    print(imgFile)
    global net, classes, colors
    if(net==None):
        # 加载模型配置和权重
        net = cv2.dnn.readNet("../common/yolov3.weights", "../common/yolov3.cfg")

        # 加载对象类别
        classes = []
        with open("coco.names", "r") as f:
                classes = [line.strip() for line in f.readlines()]

        # 随机颜色
        colors = np.random.uniform(0, 255, size=(len(classes), 3))

    # 加载图像
    image = cv2.imread(imgFile)

    # 获取图像尺寸
    height, width, _ = image.shape

    new_height = 416
    new_width = int(width * (new_height / height))

    resized_image = cv2.resize(image, (new_width, new_height))

    # 构建输入blob
    blob = cv2.dnn.blobFromImage(image, 1/255.0, (416, 416), swapRB=True, crop=False)

    # 设置输入blob作为网络的输入
    net.setInput(blob)

    # 前向传递,获取输出层
    layer_names = net.getLayerNames()
    print("layer names counts=%d" %(len(layer_names)))
    print(net.getUnconnectedOutLayers())

    #print(length(layer_names))
    #output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
    output_layers = [layer_names[i - 1] for i in net.getUnconnectedOutLayers()]
    outs = net.forward(output_layers)

    # 初始化边界框、置信度和类别列表
    boxes = []
    confidences = []
    class_ids = []

    # 对每个输出层进行处理
    for out in outs:
        for detection in out:
            # 获取类别置信度
            scores = detection[5:]
            class_id = np.argmax(scores)
            confidence = scores[class_id]

            # 过滤掉低置信度的预测
            if confidence > ratio:
                # 获取边界框坐标
                center_x = int(detection[0] * width)
                center_y = int(detection[1] * height)
                w = int(detection[2] * width)
                h = int(detection[3] * height)
    
                # 边界框的左上角坐标
                x = int(center_x - w / 2)
                y = int(center_y - h / 2)
    
                # 更新边界框、置信度和类别列表
                boxes.append([x, y, w, h])
                confidences.append(float(confidence))
                class_ids.append(class_id)

    # 非最大值抑制
    indices = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
    print("indices", len(indices), indices)
    print("-------------------------------")
    print("class_ids", len(class_ids), class_ids)
    print("classes", len(classes));
    print("colors", len(colors));
    print("boxes counts=", len(boxes), len(indices));

    # 绘制边界框和类别标签
    font = cv2.FONT_HERSHEY_SIMPLEX
    for i in range(len(boxes)):
        if i in indices:
            x, y, w, h = boxes[i]
            #label = classes[class_ids[i]]
            #color = colors[class_ids[i]]
            color = (128,0,128)
            cv2.rectangle(image, (x, y), (x+w, y+h), color, 2)
            #cv2.putText(image, label, (x, y-10), font, 0.5, color, 2)

    # 显示结果图像
    name, extension = os.path.splitext(imgFile)
    output_filename = name + ".ai.jpg";
    cv2.imwrite(output_filename, image)

for file in imgFiles:
    recog_person(file,0.5)

3.注意事项

3.1 yoloV3的训练库使用的分辨率是一个正方形的分辨率,416*416或者压缩,或者是扫描。

3.2上面筛选目标对象的代码没有代入,所以误识别到了一些其他物体。

3.3  yoloV3的训练库名称是:yolov3.weight yolov3.cfg

3.4  置信概率50%。

附录A 资源消耗

  • CPU Intel(R) Core(TM) i5-9400 CPU @ 2.90GHz
  • 上面第三组 takes 415 ms
  • 复杂场景最高 takes 1945 ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1159144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一大早被用户吵醒!微信小程序用不了了【微信小程序用户隐私保护】

一、一开始事情是这样事儿的 几周前用户收到提示的时候发给我看,我没有当回事(ps内心:能腾一腾就腾一腾,没时间搞) 几周后,突然的一大早用户就给我发微信说微信小程序登录不进去,学生没法正常使用学习&am…

猫耳 Android 播放框架开发实践

概述 猫耳FM是中国最大的 95 后声音内容分享平台,是B站重要平台之一,深度合作国内顶级声优工作室,打造了数百部精品广播剧,全站播放总量超过百亿次。 MEPlayer 是猫耳 Android 技术团队研发的一款适用于音视频、直播、特效播放等…

hustoj在线判题平台详细搭建二开及美化过程(ubuntu20.04 / centos7.9)常见问题解决

服务器配置需求 阿里云 腾讯云 华为云均可,腾讯云目前是最合适的。 腾讯云 2H4G 5M 60GB 轻量应用服务器 承载大约 200~400人使用,经过压力测试,评测并发速度可满足130人左右的在线比赛。 镜像选Ubuntu22.04LTS,物理机安装Ubun…

从冷酷到温馨:当代浴室的新面貌

如今的现代浴室不再是单纯的卫生空间,它兼具庇护之地和功能性。浴室是仪式和放松的场所,旨在通过精心设计的颜色、色调、材料和表面,传达宁静和舒适的感觉。它应该是一个温和的空间,而不是一个冰冷的地方。 过去,浴室中…

【Linux】权限和权限管理

【Linux】权限和权限管理 一、shell命令以及运行原理二、Linux权限的概念root和普通用户直接的身份切换临时权限提升 三、Linux权限管理01.文件访问者的分类(人)02.文件类型和访问权限(事物属性)03.文件权限值的表示方法04.文件访…

接口测试 —— Jmeter 之测试片段的应用

一、什么是测试片段? 控制器上一种特殊的线程组,它与线程组处于一个层级。与线程组不同的就是:测试片段不会执行。它是一个模块控制器或者被控制器应用时才会被执行。通常与Include Controller或模块控制器一起使用。 1.1 那它有啥作用&…

VSCode配置Fortran并运行国际参考电离层2020模型(IRI2020)

VSCode配置Fortran并运行国际参考电离层2020模型(IRI2020) 由于VSCode具有轻量、强大的代码编辑功能和丰富的插件生态系统,受到广大编程人员的青睐,在科学研究中也应用广泛。在电离层研究中,IRI模型可以计算出给定的地…

518抽奖软件,后台操作对观众隐藏不可见

518抽奖软件简介 518抽奖软件,518我要发,超好用的年会抽奖软件,简约设计风格。 包含文字号码抽奖、照片抽奖两种模式,支持姓名抽奖、号码抽奖、数字抽奖、照片抽奖。(www.518cj.net) 电脑2种投影模式 复制模式 - 使电脑所连接的…

Vue:Vue项目中的Cesium配置备忘录

作者:CSDN _乐多_ 本文记录了 Vue 项目中配置 Cesium 相关过程和细节。 文章目录 一、安装Cesium二、配置 index.html 一、安装Cesium npm install Cesium在node_modules中找到Cesium,将其中的Cesium文件夹复制到public中。 二、配置 index.html 主要…

jetsonTX2 nx配置yolov5和D435I相机,完整步骤

转载一篇问题解决博客:问题解决 一、烧录系统 使用SDK烧录 二、安装archiconda3 JETSON TX2 NX的架构是aarch64,与win10,linxu不同,所以不能安装Anaconda,这里安装对应的archiconda。 1. 安装 wget https://github.com/Archiconda/build-tools/rel…

Linux新建普通用户无法使用退格键与tab键

创建普通用户 useradd mulan passwd mulan 切换用户 su mulan 发现普通用户无法使用退格键与tab键,一直显示如图 如图,按退格键(Backspace)、删除键出现 ‘^H’ 符号,tab键也不能自动拼写 这是新用户下的普通bash配置都没有,从…

vivo 自研蓝河操作系统 BlueOS 发布:支持大模型、BlueXlink 协议实现万物互联

大家好,我是 Lorin , 2023 年 11 月 1 日,在今天的 2023 年 vivo 开发者大会上,vivo 自主研发的蓝河操作系统(BlueOS)正式亮相。这款操作系统被宣传为一款面向未来的智能操作系统,具备出色的支持能力&#…

机器人连杆惯量参数辨识(估计)

杆的转动惯量的计算公式是Imr^2。在经典力学中,转动惯量(又称质量惯性矩,简称惯矩)通常以I 或J表示,SI 单位为 kgm。对于一个质点,I mr,其中 m 是其质量,r 是质点和转轴的垂直距离。…

如何在麒麟上安装 ONLYOFFICE 桌面编辑器

我们很高兴地告诉大家,ONLYOFFICE 桌面编辑器现已上架麒麟软件商店。请阅读下文了解详情。 关于麒麟 麒麟是一款国产操作系统,主要是为了满足中国市场的需求和偏好而设计的。 它能够与各种硬件平台和软件应用程序的广泛兼容,因而受到认可。…

折纸达珠峰高度(forwhile循环)

对折0.1mm厚度的纸张多少次,高度可达珠峰高度8848180mm。 (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅…

js 在数组对象 过滤掉无用的数据

下面的数组中有null, undefind, NaN, ’ ,过滤掉这些数据 let arr [12, null, 0, xyz, null, -25, NaN, , undefined, 0.5, false]; let arr1 [{k:12,o:1},{k:12,o:null},{k:12,o:NaN}, {k:null,o:}, {k:0,o:0}, {k:xyz,o:1}, …

Linux进程概念(1)

📟作者主页:慢热的陕西人 🌴专栏链接:Linux 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容为进程的概念做铺垫,主要介绍冯诺依曼体系结…

【C语法学习】3 - fgetc()函数

文章目录 1 函数原型2 参数3 返回值4 比较5 示例5.1 示例15.2 示例2 1 函数原型 fgetc():从指定流stream中读取一个字符,函数原型如下: int fgetc(FILE *stream)2 参数 fgetc()函数只有一个参数stream: 参数stream是一个指向F…

AI时代架构师修炼之道:ChatGPT让架构师插上翅膀

文章目录 一、简介二、ChatGPT对架构师工作的帮助1. 快速理解和分析需求2. 提供代码建议和解决方案3. 辅助系统设计和优化4. 提高团队协作效率 三、如何使用ChatGPT提高架构师工作效率1. 了解用户需求和分析问题2. 编码实践和问题解决3. 系统设计和优化建议4. 团队协作和沟通效…

双11一开场,西圣Olite开放式耳机就售罄!全网卖断货!

今年双11预售开始,西圣Olite首个双十一,就已成为爆款,登录各大电商购物平台APP,亦显示西圣Olite开放式耳机已售罄。 如今的耳机圈中,开放式耳机因其独特的优势备受青睐,而国内知名专注于高端配置平价价格的…