使用YOLOv3(Python - Keras)实时检测屏幕画面进行目标检测教程(以检测GTA5游戏画面为例子)
毕业设计项目做了一个在游戏GTA5中实现自动驾驶的项目,其中一个功能是汽车的碰撞检测。为了实现这个功能我首先需要能实现识别汽车,对比了使用了SSD和Faster-RCNN,我选择了YOLOv3来实现这个功能,因为它既有速度又有精度,还非常灵活,简直是工业界良心。
当时在网上查阅相关教程的时候,很多教程只是讲到调用一下文件实现视频文件的检测。然而我需要对屏幕上显示的游戏画面进行检测,所以很多教程都不适用。
现在毕设做好了比较空闲,所以记录一下顺便帮助后来人,这个教程会讲如何用YOLOv3检测屏幕上的画面。
本文旨在帮助新手快速上手YOLOv3,不会涉及详细的代码和相应的算法原理,具体YOLO的原理等以后有时间再写篇详细的~
1、下载YOLOv3的Keras版(https://github.com/qqwweee/keras-yolo3) 里面有成熟的代码。
2、生成Keras的.h5文件,
需要:
- 1. yolo网络结构配置文件 .cfg ,如 yolov3.cfg
- 2. yolo训练好的权重文件 .weights ,如 yolov3.weights
权重文件:https://pjreddie.com/media/files/yolov3.weights,此权重文件包含一些预训练的参数。
网络结构配置文件:项目默认自带了YOLOv3-416的网络的.cfg。如果需要其他网络,则以txt文件打开.cfg文件,将第8行和第9行的参数修改为320或608。
下图为各种YOLOv3版本的准确度和速度对比,根据自己项目的准确度和速度需求,选择自己的网络(改那个.cfg)
下面为官网对比(https://pjreddie.com/darknet/yolo/)
下载好上述两个文件后,将权重文件放到项目根目录下
3、运行convert.py,将 yolov3.weights转换成Keras能使用的.h5文件
使用方法:
python convert.py yolov3.cfg yolov3.weights yolov3.h5
执行完成示意图
执行完成之后在当前目录下生成yolov3.h5文件,将其重命名为yolo.h5并放入model_data文件夹中。
4、新建grabscreen.py文件,复制以下内容,此文件里实现用Win32API截取屏幕。相比于使用PIL,这种方式截屏速度更快
import cv2
import numpy as np
import win32gui
import win32ui
import win32con
import win32apidef grab_screen(region=None):hwin = win32gui.GetDesktopWindow()if region:left, top, x2, y2 = regionwidth = x2 - left + 1height = y2 - top + 1else:width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)hwindc = win32gui.GetWindowDC(hwin)srcdc = win32ui.CreateDCFromHandle(hwindc)memdc = srcdc.CreateCompatibleDC()bmp = win32ui.CreateBitmap()bmp.CreateCompatibleBitmap(srcdc, width, height)memdc.SelectObject(bmp)memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY)signedIntsArray = bmp.GetBitmapBits(True)img = np.fromstring(signedIntsArray, dtype='uint8')img.shape = (height, width, 4)srcdc.DeleteDC()memdc.DeleteDC()win32gui.ReleaseDC(hwin, hwindc)win32gui.DeleteObject(bmp.GetHandle())return cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)
5、新建example.py文件,复制以下内容 ,并运行。
import numpy as np
import cv2
import time
from grabscreen import grab_screen
from PIL import Image
from yolo import YOLO
import tensorflow as tfconfig = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.8 #爆显存的话可以在此调整程序的显存占用情况
session = tf.Session(config=config)yolo = YOLO()while True:image_array = grab_screen(region=(0, 0, 1280, 720))# 获取屏幕,(0, 0, 1280, 720)表示从屏幕坐标(0,0)即左上角,截取往右1280和往下720的画面array_to_image = Image.fromarray(image_array, mode='RGB') #将array转成图像,才能送入yolo进行预测img = yolo.detect_image(array_to_image) #调用yolo文件里的函数进行检测img = np.asarray(img) #将图像转成arraycv2.imshow('window',cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) #将截取的画面从另一窗口显示出来,对速度会有一点点影响,不过也就截取每帧多了大约0.01s的时间if cv2.waitKey(25) & 0xFF == ord('q'): #按q退出,记得输入切成英语再按qcv2.destroyAllWindows()break
6、检测结果:
左边为GTA5的游戏画面,右边为检测结果,使用一个窗口显示出来
使用YOLOv3(Python - Keras)实时检测屏幕画面进行目标检测教程(以检测GTA5游戏画面为例子)相关推荐
- 基于python keras口罩检测人脸检测佩戴口罩可读视频可读摄像头实时视频流
人脸识别技术已经非常普及啦,现在戴口罩的脸支付宝也可以识别,据报道阿里现在正在尝试主导人脸识别技术的某些标准.在商业上大多数公司会选择国内AI大咖,比如百度智能云.阿里智慧云.华为云.腾讯云等等.这些 ...
- ros web_video_server的使用及Python获取实时画面
网络上看有人使用的是 uvc_camera 来提供视频源,但根据 http://wiki.ros.org/Sensors/Cameras 的列表可知,uvc_camera已不再维护,当然也可以直接参考 ...
- yolov3 python接口_darknetyolov3调用Python接口来检测和保存批处理图像,DarknetYoloV3,python,进行,批量,图片,并...
将主函数替换即可. # 将检测结果绘制到照片上并且保存 if __name__ == "__main__": #os.environ["CUDA_VISIBLE_DEVI ...
- python查看运行内存占用_利用Python如何实时检测自身内存占用
前言 最近在做文本统计,用 Python 实现,遇到了一个比较有意思的难题--如何保存统计结果. 直接写入内存实在是放不下,十几个小时后内存耗尽,程序被迫关闭.如果直接写入数据库吧,每次写入又太慢了, ...
- Keras YOLOv3代码详解(三):目标检测的流程图和源代码+中文注释
Keras YOLOv3源代码下载地址:https://github.com/qqwweee/keras-yolo3 YOLOv3论文地址:https://pjreddie.com/media/fil ...
- 车流量检测实现:多目标追踪、卡尔曼滤波器、匈牙利算法、SORT/DeepSORT、yoloV3、虚拟线圈法、交并比IOU计算
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) CNN:RCNN.SPPNet.Fast RCNN.Faste ...
- 基于python的移动物体检测_感兴趣区域的移动物体检测,框出移动物体的轮廓 (固定摄像头, opencv-python)...
感兴趣区域.特定区域.框出移动物体的轮廓.越界检测.入侵物体检测.使用 opencv-python库的函数cv2.findContours.cv2.approxPolyDP.cv2.arcLength ...
- python 人脸检测 大胡子_Python | 50行代码实现人脸检测
信息安全公益宣传,信息安全知识启蒙. 加微信群回复公众号:微信群:QQ群:16004488 加微信群或QQ群可免费索取:学习教程 教程列表见微信公众号底部菜单 现在的人脸识别技术已经得到了非常广泛的应 ...
- ESP32 + Python守护家庭健康、自己动手做个甲醛浓度检测设备
甲醛(化学式HCHO或CH2O)是一种有特殊刺激气味的气体,对人的眼睛和鼻子有强烈的刺激作用.若空气中甲醛浓度过高,比如新装修的房子.新买的汽车等,可引起中毒反应,严重的可致癌.甲醛是空气中的杀手之 ...
最新文章
- 【代码笔记】Web-CSS-CSS id和Class选择器
- 面试官: 讲讲 Spring 事务有哪些坑?
- 邓侃:深度强化学习“深”在哪里?
- Machine Learning on Spark—— 统计基础(一)
- 100行代码让您学会JavaScript原生的Proxy设计模式
- linux终端输入lsblk无命令,lsblk
- Hessian matrix黑塞矩阵(海森矩阵)和雅克比矩阵Jacobian matrix
- Linux学习基础一 【安装 目录 系统命令 常用vim操作】
- Salesforce入门教程(中文)-018 VF绑定
- python搭建简易HTTPServer服务
- 数据湖 Iceberg 在网易云音乐的实践
- 使用mindspore过程中Using shared memory queue, but rowsize is larger than allocated
- 高性能计算中的并行计算、分布式计算、网格计算和云计算之间的区别与联系
- 用户/账户/账号的理解
- 优化计算机组策略,7种优化技巧优化Windows 10系统 提高电脑性能
- k8s-imagePullPolicy拉取策略
- Java实现替换Word中文本
- NLP-文本向量训练及相似度计算
- 张亚勤:微软九成研发资源投入云计算
- 【电信学】【2018.01】在芬兰私人和公共停车场实施5G V2X服务