《python + opencv实现目标检测》
Posted 一个不知道干嘛的小萌新
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《python + opencv实现目标检测》相关的知识,希望对你有一定的参考价值。
1.环境安装
1.1 安装python
python版本是3.10
安装 Python:首先需要安装 Python,可以从官网 https://www.python.org/downloads/ 下载安装包,选择最新版本的 Python 安装即可。
在终端输入python,看是否报错,没报错证明python安装成功。
1.2 安装opencv
在终端输入:
pip install numpy
pip install opencv-python
测试是否安装成功
python
>>> import cv2
没有报错,证明成功。
1.3 安装后续需要用到的库
pip install datetime
pip install pygame
pip install keyboard
pip install pywin32
pip install pyautogui
pip install Pillow
2.简单的源码
# -*- coding: utf-8 -*- import cv2 import numpy as np import time import pyautogui import keyboard import sys import pygame import datetime import os #窗口位置 game_rect = (0, 0, 800, 600) #需要检测的目标 myself_template = cv2.imread(\'myself.png\', cv2.IMREAD_GRAYSCALE) wheel_template = cv2.imread(\'wheel.png\', cv2.IMREAD_GRAYSCALE) other_template = cv2.imread(\'other.png\', cv2.IMREAD_GRAYSCALE) #check_green_template = cv2.imread(\'check_green.png\', cv2.IMREAD_GRAYSCALE) player_time = 0 #音乐相关初始化 pygame.init() pygame.mixer.music.load(\'childhood.mp3\') #切换窗口 def exit_game(): keyboard.press(\'alt\') time.sleep(0.1) keyboard.press(\'tab\') time.sleep(0.1) keyboard.release(\'alt\') time.sleep(0.1) keyboard.release(\'tab\') #退出整个程序 sys.exit() def play_audio(): if not pygame.mixer.music.get_busy(): pygame.mixer.music.play() while True: #屏幕截图加载图片 screenshot = pyautogui.screenshot(region=game_rect) screenshot = np.array(screenshot) screenshot = screenshot[:, :, ::-1].copy() screenshot_gray = cv2.cvtColor(screenshot, cv2.COLOR_BGR2GRAY) #获取当前时间 current_time = datetime.datetime.now() print(f"[current_time] ") #轮检测 wheel_result = cv2.matchTemplate(screenshot_gray, wheel_template, cv2.TM_CCOEFF_NORMED) threshold = 0.99 hole_loc = np.where(wheel_result >= threshold) num_matches = len(hole_loc[0]) if num_matches > 0: print(u"检测到地图轮个数为:",f"num_matches") \'\'\'if num_matches == 1: exit_game() \'\'\' #测谎检测 \'\'\'check_green_result = cv2.matchTemplate(screenshot_gray, check_green_template, cv2.TM_CCOEFF_NORMED) threshold = 0.99 other_loc = np.where(check_green_result >= threshold) num_matches = len(other_loc[0]) if num_matches > 0: print(u"检测到测谎仪:",f"num_matches")\'\'\' for filename in os.listdir(\'check_folder\'): if filename.endswith(\'.jpg\') or filename.endswith(\'.png\'): check_img = cv2.imread(os.path.join(\'check_folder\', filename), cv2.IMREAD_GRAYSCALE) check_result = cv2.matchTemplate(screenshot_gray, check_img, cv2.TM_CCOEFF_NORMED) threshold = 0.97 other_loc = np.where(check_result >= threshold) num_matches = len(other_loc[0]) if num_matches > 0: print(u"检测到测谎仪:",f"num_matches") play_audio() #其他玩家检测 other_result = cv2.matchTemplate(screenshot_gray, other_template, cv2.TM_CCOEFF_NORMED) threshold = 0.99 other_loc = np.where(other_result >= threshold) num_matches = len(other_loc[0]) if num_matches > 0: player_time += 1; if player_time > 5: player_time = 0 print(u"检测到其他人进入地图人数为:",f"num_matches") play_audio() else: player_time = 0 #自己检测 myself_result = cv2.matchTemplate(screenshot_gray, myself_template, cv2.TM_CCOEFF_NORMED) threshold = 0.99 myself_loc = np.where(myself_result >= threshold) num_matches = len(myself_loc[0]) if num_matches > 0: print(u"检测到我自己人数:",f"num_matches") time.sleep(1)
该demo需要识别的图片以及目标图片以及mp3音源,因此直接复制是跑不了的。本demo是提供一个思路。
以上是关于《python + opencv实现目标检测》的主要内容,如果未能解决你的问题,请参考以下文章
教程 | 如何使用DockerTensorFlow目标检测API和OpenCV实现实时目标检测和视频处理
树莓派上利用python+opencv+dlib实现嘴唇检测
目标检测实战:4种YOLO目标检测的C++和Python两种版本实现