毕业设计项目做了一个在游戏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游戏画面为例子)相关推荐

  1. 基于python keras口罩检测人脸检测佩戴口罩可读视频可读摄像头实时视频流

    人脸识别技术已经非常普及啦,现在戴口罩的脸支付宝也可以识别,据报道阿里现在正在尝试主导人脸识别技术的某些标准.在商业上大多数公司会选择国内AI大咖,比如百度智能云.阿里智慧云.华为云.腾讯云等等.这些 ...

  2. ros web_video_server的使用及Python获取实时画面

    网络上看有人使用的是 uvc_camera 来提供视频源,但根据 http://wiki.ros.org/Sensors/Cameras 的列表可知,uvc_camera已不再维护,当然也可以直接参考 ...

  3. yolov3 python接口_darknetyolov3调用Python接口来检测和保存批处理图像,DarknetYoloV3,python,进行,批量,图片,并...

    将主函数替换即可. # 将检测结果绘制到照片上并且保存 if __name__ == "__main__": #os.environ["CUDA_VISIBLE_DEVI ...

  4. python查看运行内存占用_利用Python如何实时检测自身内存占用

    前言 最近在做文本统计,用 Python 实现,遇到了一个比较有意思的难题--如何保存统计结果. 直接写入内存实在是放不下,十几个小时后内存耗尽,程序被迫关闭.如果直接写入数据库吧,每次写入又太慢了, ...

  5. Keras YOLOv3代码详解(三):目标检测的流程图和源代码+中文注释

    Keras YOLOv3源代码下载地址:https://github.com/qqwweee/keras-yolo3 YOLOv3论文地址:https://pjreddie.com/media/fil ...

  6. 车流量检测实现:多目标追踪、卡尔曼滤波器、匈牙利算法、SORT/DeepSORT、yoloV3、虚拟线圈法、交并比IOU计算

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) CNN:RCNN.SPPNet.Fast RCNN.Faste ...

  7. 基于python的移动物体检测_感兴趣区域的移动物体检测,框出移动物体的轮廓 (固定摄像头, opencv-python)...

    感兴趣区域.特定区域.框出移动物体的轮廓.越界检测.入侵物体检测.使用 opencv-python库的函数cv2.findContours.cv2.approxPolyDP.cv2.arcLength ...

  8. python 人脸检测 大胡子_Python | 50行代码实现人脸检测

    信息安全公益宣传,信息安全知识启蒙. 加微信群回复公众号:微信群:QQ群:16004488 加微信群或QQ群可免费索取:学习教程 教程列表见微信公众号底部菜单 现在的人脸识别技术已经得到了非常广泛的应 ...

  9. ESP32 + Python守护家庭健康、自己动手做个甲醛浓度检测设备

     甲醛(化学式HCHO或CH2O)是一种有特殊刺激气味的气体,对人的眼睛和鼻子有强烈的刺激作用.若空气中甲醛浓度过高,比如新装修的房子.新买的汽车等,可引起中毒反应,严重的可致癌.甲醛是空气中的杀手之 ...

最新文章

  1. 【代码笔记】Web-CSS-CSS id和Class选择器
  2. 面试官: 讲讲 Spring 事务有哪些坑?
  3. 邓侃:深度强化学习“深”在哪里?
  4. Machine Learning on Spark—— 统计基础(一)
  5. 100行代码让您学会JavaScript原生的Proxy设计模式
  6. linux终端输入lsblk无命令,lsblk
  7. Hessian matrix黑塞矩阵(海森矩阵)和雅克比矩阵Jacobian matrix
  8. Linux学习基础一 【安装 目录 系统命令 常用vim操作】
  9. Salesforce入门教程(中文)-018 VF绑定
  10. python搭建简易HTTPServer服务
  11. 数据湖 Iceberg 在网易云音乐的实践
  12. 使用mindspore过程中Using shared memory queue, but rowsize is larger than allocated
  13. 高性能计算中的并行计算、分布式计算、网格计算和云计算之间的区别与联系
  14. 用户/账户/账号的理解
  15. 优化计算机组策略,7种优化技巧优化Windows 10系统 提高电脑性能
  16. k8s-imagePullPolicy拉取策略
  17. Java实现替换Word中文本
  18. NLP-文本向量训练及相似度计算
  19. 张亚勤:微软九成研发资源投入云计算
  20. 【电信学】【2018.01】在芬兰私人和公共停车场实施5G V2X服务

热门文章

  1. 四个收敛的关系:一致收敛,点态收敛,绝对收敛,条件收敛
  2. 在Java 17中偏向锁可算废了
  3. FME cad中地块图形与图形标注信息的连接(空间关系连接)
  4. Kali Linux 安装Nvidia显卡驱动(二)CUDA, Pyrit and Cpyrit-cuda
  5. 拉依达准则python实现
  6. linux mysql dengl_交作业了!哈哈-·
  7. 日常活动--英文短句
  8. 安装Ubuntu 16.04时出现:没有定义根文件系统,请到分区菜单修改
  9. Kali Linux修改更新源
  10. 《信号与系统》很难?也许你应该看看这篇文章