opencv練習面部識別,缺少視頻文件,爬取視頻又沒成功,就想通過截屏保存圖像的方式保存使用。
屏幕像素大小,需要通過別的模塊,練手就直接使用自己屏幕的了,如果想根據屏幕像素不同變動的,可以再添加。
另外既然截屏,就可以直接在圖像讀取後直接面部識別,節省一步保存轉換的步驟。
import uuid,socket,time
import pyautogui
import cv2
import numpy as np
import pyttsx3 #語音播放
#獲取電腦設備號
def get_mac():
#mac
mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
# 獲取主機名
hostname = socket.gethostname()
# 獲取IP
ip = socket.gethostbyname(hostname)
# 結果數據導出
pc_mac = {‘mac’:mac,‘hostname’:hostname,‘ip’:ip}
return pc_mac
def get_current_time():
ct = time.time()
local_time = time.localtime(ct)
data_head = time.strftime(“%Y%m%d%H%M%S”, local_time)
data_secs = abs(ct - round(ct)) * 1000
time_stamp = “%s%03d” % (data_head, data_secs)
return time_stamp
def pyttsx_yybf(text):
engine = pyttsx3.init()
engine.setProperty(‘rate’, 160) #語音速度
engine.say(text) #朗讀內容
engine.runAndWait()
def get_win_gui(mac,in_time,output):
# 分別代表:左上角坐標,寬高
img = pyautogui.screenshot(region=[0,0,1366,768])
# 對獲取的圖片轉換成二維矩陣形式,後再將RGB轉成BGR
# 因為imshow,默認通道順序是BGR,而pyautogui默認是RGB所以要轉換一下,不然會有點問題
img_cv = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
#cv2.imwrite(‘./image/win_gui/’+mac+‘_’+in_time+‘.jpeg’ , img_cv)
output.write(img_cv)
if name == ‘main’:
pyttsx_yybf('倒數開始截屏')
for i in range(10):
pyttsx_yybf('%d 秒' % (10-i))
time.sleep(0.5)
pyttsx_yybf('截屏開始')
# 獲取系統數據
mac_id = get_mac()
# 展現數據
print('計算機參數展示', mac_id)
# 獲取內容
mac, hostname, ip = mac_id['mac'], mac_id['hostname'], mac_id['ip']
#錄屏准備
fourcc = cv2.VideoWriter_fourcc('X','V','I','D')
fps = 10
output = cv2.VideoWriter('jieping.avi',fourcc,fps,(1366,768))
frame_num = 60 * fps
# 循環執行
while True and frame_num > 0:
in_time = get_current_time()
#print('in_time',in_time)
get_win_gui(mac,in_time,output)
frame_num -= 1
time.sleep(0.0005)
pyttsx_yybf('截屏結束')