版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
項目一使用OpenCV實現(xiàn)人臉檢測嵌入式人工智能技術(shù)應用項目引導案例隨著電子商務(wù)等應用的發(fā)展,人臉識別成為最有潛力的生物身份驗證手段,這種應用背景要求自動人臉識別系統(tǒng)能夠?qū)σ话銏D像具有一定的識別能力,由此所面臨的一系列問題使得人臉檢測開始作為一個獨立的課題受到研究者的重視。今天,人臉檢測的應用背景已經(jīng)遠遠超出了人臉識別系統(tǒng)的范疇,在基于內(nèi)容的檢索、視頻目標檢測等方面有著重要的應用價值。思考一下,大家見過哪些場合用到人臉檢測?項目引導案例OpenCV實現(xiàn)圖像的讀取與保存任務(wù)一職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一OpenCV實現(xiàn)圖像的讀取與保存了解opencv的使安裝方法;掌握opencv讀取圖像方式;掌握opencv存儲圖像方式。能使用VideoCapture方法實例化攝像頭對象;能使用set方法設(shè)置采集圖像的像素;能使用namedWindow方法構(gòu)建圖像窗口;能使用read方法讀取圖像;能使用imshow方法展示圖像;能使用imwrite方法保存圖像。職業(yè)能力目標01知識目標技能目標職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一OpenCV實現(xiàn)圖像的讀取與保存
本實驗將實現(xiàn)使用USB攝像頭完成圖像采集、圖像顯示以及圖像保存。任務(wù)描述任務(wù)要求使用VideoCapture方法實例化攝像頭對象;使用set方法設(shè)置采集圖像的像素;使用namedWindow方法構(gòu)建圖像窗口;使用read方法讀取圖像;使用imshow方法展示圖像;使用imwrite方法保存圖像。任務(wù)描述與要求02職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一OpenCV實現(xiàn)圖像的讀取與保存任務(wù)分析實現(xiàn)opencv采集圖像可能會涉及到哪些步驟?根據(jù)自己的了解可能會用到哪些硬件和軟件?任務(wù)分析與計劃03任務(wù)計劃表項目名稱使用OpenCV實現(xiàn)人臉檢測任務(wù)名稱OpenCV實現(xiàn)圖像的讀取與保存計劃方式自主設(shè)計計劃要求請用9個計劃步驟來完整描述出如何完成本次任務(wù)序號任務(wù)計劃1
2
3
4
5
6
789通過上面的思考,你是否對本任務(wù)要完成的工作有所了解?讓我們一起來制訂完成本次任務(wù)的實施計劃吧!任務(wù)分析與計劃03職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一OpenCV實現(xiàn)圖像的讀取與保存OpenCV204知識儲備JupyterLab1Linux硬件設(shè)備3組成部分04菜單欄啟動項文件欄插件欄交互模式Python交互式模式可以直接輸入代碼,然后執(zhí)行,并立刻得到結(jié)果模塊化界面可以在同一個窗口同時打開好幾個notebook或文件同一文檔多視圖使你能夠?qū)崟r同步編輯文檔并查看結(jié)果
支持多種數(shù)據(jù)格式你可以查看并處理多種數(shù)據(jù)格式主要特點04菜單功能文件文件和目錄有關(guān)的操作編輯編輯文檔和其他活動有關(guān)的動作。查看更改JupyterLab外觀的動作運行用于在不同活動(例如筆記本和代碼控制臺)中運行代碼的動作內(nèi)核用于管理內(nèi)核的操作,內(nèi)核是運行代碼的獨立過程標簽??棵姘逯写蜷_的文檔和活動的列表設(shè)置常用設(shè)置和高級設(shè)置編輯器編輯JupyterLab和內(nèi)核幫助鏈接的列表JupyterLab菜單欄菜單欄04操作按鈕功能
保存內(nèi)容,并創(chuàng)建檢查點下方插入單元格剪切選中的單元格復制選中的單元格從剪切板粘貼單元格運行選定的單元格并向前移動終端內(nèi)核JupyterLab和內(nèi)核幫助鏈接的列表重啟內(nèi)核,并重新運行整個notebook單元格狀態(tài)JupyterLab用戶界面操作欄用戶界面操作欄04快捷鍵功能Enter
轉(zhuǎn)入編輯模式Shift-Enter運行本單元,選中下個單元Ctrl-Enter運行本單元Alt-Enter運行本單元,在其下插入新單元Y單元轉(zhuǎn)入代碼狀態(tài)M單元轉(zhuǎn)入markdown狀態(tài)R單元轉(zhuǎn)入raw狀態(tài)A在上方插入新單元B在下方插入新單元DD刪除選中單元格JupyterLab常用快捷鍵常用快捷鍵04OpenCV04知識儲備JupyterLab21Linux硬件設(shè)備3
Opencv簡介04
OpenCV是一個基于Apache2.0許可(開源)發(fā)行的跨平臺計算機視覺和機器學習軟件庫,可以運行在Linux、Windows、Android和MacOS操作系統(tǒng)上。它輕量級而且高效——由一系列C函數(shù)和少量C++類構(gòu)成,同時提供了Python、Ruby、MATLAB等語言的接口,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。GaryBradsky于1999年在英特爾創(chuàng)立OpenCV,并于2000年發(fā)布第一個版本。OpenCV現(xiàn)在支持與計算機視覺和機器學習相關(guān)的眾多算法,并且正在日益擴展。OpenCV支持各種編程語言,如C++、Python、Java等,可在不同的操作系統(tǒng)上使用。04OpenCV概述思考一下,OpenCV可在哪些操作系統(tǒng)上使用?
OpenCV致力于真實世界的實時應用,通過優(yōu)化的C代碼的編寫對其執(zhí)行速度帶來了可觀的提升,并且可以通過購買Intel的IPP高性能多媒體函數(shù)庫(IntegratedPerformancePrimitives)得到更快的處理速度。圖1為OpenCV與當前其他主流視覺函數(shù)庫的性能比較。04OpenCV優(yōu)勢優(yōu)勢:
Opencv-python簡介04
opencv-python是由opencvC++實現(xiàn)并封裝的Python庫旨在解決計算機視覺問題。opencv-python使用numpy,這是一個高度優(yōu)化的數(shù)據(jù)操作庫,具有Matlab風格的語法。所有OpenCV數(shù)組結(jié)構(gòu)都轉(zhuǎn)換為numpy數(shù)組。這也使得與使用numpy的其他庫(如scipy和matplotlib)集成更容易。
與C/C++等語言相比,Python速度較慢。也就是說,Python可以使用C/C++輕松擴展,這使我們可以在C/C++中編寫計算密集型代碼,并創(chuàng)建可用作Python模塊的Python包裝器。這給我們帶來了兩個好處:①
代碼與原始C/C++代碼一樣快(因為它是在后臺工作的實際C++代碼),②
在Python中編寫代碼比使用C/C++更容易。OpenCV-Python是原始OpenCVC++實現(xiàn)的Python包裝器。04OpenCV-python優(yōu)勢優(yōu)勢:VideoCapture()05創(chuàng)建VideoCapture對象的時候,我們需要傳入一個合適的攝像頭編號。cv2.VideoCapture(0)VideoCapture()05參數(shù)說明:VideCapture接受的參數(shù)為序號0:默認為開發(fā)板上的攝像頭(如果有的話)/USB攝像頭webcam1:USB攝像頭22:USB攝像頭3以此類推-1:代表最新插入的USB設(shè)備cap=cv2.VideoCapture(0)實例化一個對象賦值給captime.sleep(2)設(shè)置睡眠2秒,為了給攝像頭有打開的時間OpenCV04知識儲備JupyterLab21Linux硬件設(shè)備32Linux硬件設(shè)備05linux是以什么方式訪問設(shè)備?
linux中是以訪問文件的方式訪問設(shè)備。就是將設(shè)備當做一個特殊的文件來進行讀寫等操作。因為Linux系統(tǒng)將所有的硬件設(shè)備都當做文件來處理,當使用光驅(qū)等硬件設(shè)備時,就必須將其掛載到系統(tǒng)中,只有這樣Linux才能識別。當在Linux系統(tǒng)中使用這些硬件設(shè)備時,只有將Linux本身的文件目錄與硬件設(shè)備的文件目錄合二為一,硬件設(shè)備才能為我們所用。合二為一的過程稱為“掛載”。如果不掛載,通過Linux系統(tǒng)中的圖形界面系統(tǒng)可以查看找到硬件設(shè)備,但命令行方式無法找到。Linux硬件設(shè)備05在linux中任何對象都是文件,查看當前是否有攝像頭掛載到Ubuntu上,可以執(zhí)行下面的命令行:-l:列出文件的詳細信息。-t:以時間排序。-r:對目錄反向排序。-h:顯示出了文件的大小ls參數(shù):/dev/video*:表示/dev/目錄下所有以video為開頭的文件!ls-ltrh/dev/video*職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一OpenCV實現(xiàn)圖像的讀取與保存05任務(wù)實施圖像的讀取與顯示2Linux下查看USB攝像頭設(shè)備1利用opencv采集圖像05!ls-ltrh/dev/video*查看video設(shè)備在linux中任何對象都是文件,查看當前是否有攝像頭掛載到Ubuntu上,可以執(zhí)行下面的命令行:!ls-ltrh/dev/video*ls參數(shù):-l:列出文件的詳細信息;-t:以時間排序;-r:對目錄反向排序;-h:顯示出了文件的大小。/dev/video*:表示/dev/目錄下所有以video為開頭的文件。05任務(wù)實施圖像的讀取與顯示2Linux下查看USB攝像頭設(shè)備142設(shè)置與創(chuàng)建顯示畫面1創(chuàng)建攝像頭實例3圖像讀取與顯示圖像保存與釋放資源圖像的讀取與顯示05圖像的讀取與顯示已經(jīng)查看到攝像頭信息,接下來使用opencv從USB攝像頭讀取圖像,并在開發(fā)板中顯示出來。圖像的讀取與顯示05importcv21.創(chuàng)建攝像頭實例(1)導入cv2python-opencv在python中的包名稱叫做cv2。cv2實現(xiàn)圖像處理和計算機視覺方面的很多通用算法。cap=cv2.VideoCapture(0)(2)創(chuàng)建攝像頭實例opencv讀取usb攝像頭的圖像,需要用到VideoCapture類,創(chuàng)建VideoCapture對象的時候,我們需要傳入一個合適的攝像頭編號。cv2.VideoCapture(0)參數(shù)說明:VideCapture接受的參數(shù)為序號;0:默認為開發(fā)板上的攝像頭(如果有的話)/USB攝像頭webcam;1:USB攝像頭2;2:USB攝像頭3以此類推;-1:代表最新插入的USB設(shè)備。05cap.set(cv2.CAP_PROP_FRAME_WIDTH,1920)#畫面寬度設(shè)定為1920cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)#畫面高度度設(shè)定為10802.設(shè)置與創(chuàng)建顯示畫面(1)設(shè)置顯示畫面接下來利用cap.set方法對窗口像素進行設(shè)置
cap.set(propId,value)參數(shù)說明:propId表示VideoCaptureProperties中的屬性標識符。cv2.CAP_PROP_FRAME_WIDTH表示設(shè)置攝像頭采集畫面寬的像素大??;cv2.CAP_PROP_FRAME_HEIGHT表示設(shè)置攝像頭采集畫面高的像素大小。value表示屬性標識符的值,下面代碼中,把采集畫面像素寬度設(shè)置為1920,高度設(shè)置為1080。dWindow('image_win',flags=cv2.WINDOW_NORMAL|cv2.WINDOW_KEEPRATIO|cv2.WINDOW_GUI_EXPANDED)cv2.setWindowProperty('image_win',cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)#全屏展示(2)創(chuàng)建顯示窗口dWindow(winname,flags):構(gòu)建視頻的窗口,用于放置圖片。參數(shù)說明:winname:表示窗口的名字,可用作窗口標識符的窗口名稱。flags:用于設(shè)置窗口的屬性,常用屬性如下:WINDOW_NORMAL:可以調(diào)整大小窗口;WINDOW_KEEPRATIO:保持圖像比例;WINDOW_GUI_EXPANDED:繪制一個新的增強GUI窗口。圖像的讀取與顯示圖像的讀取與顯示05ret,frame=<1>3.圖像讀取與顯示(1)讀取圖像使用cap.read()獲取一幀圖片,cap.read()返回值有兩個,分別賦值給ret,frame。ret:若畫面讀取成功,則返回True,反之返回False;frame:是讀取到的圖片對象(numpy的ndarray格式)。cv2.imshow('image_win',frame)cv2.waitKey(100)(2)顯示圖片cv2.imshow(winname,mat)函數(shù)可以在窗口中顯示圖像。參數(shù)說明:winname:窗口名稱(也就是我們對話框的名稱),它是一個字符串類型;mat:是一幀的畫面圖像??梢詣?chuàng)建任意數(shù)量的窗口,但必須使用不同的窗口名稱;cv2.waitKey:waitkey控制著imshow的持續(xù)時間;當imshow之后不跟waitkey時,相當于沒有給imshow提供時間展示圖像,只會有一個空窗口一閃而過;cv2.waitKey(100)表示窗口中顯示圖像時間為100毫秒;cv2.imshow之后一定要跟cv2.waitKey函數(shù)。圖像的讀取與顯示05cv2.imwrite('圖像保存.png',frame)4.圖像保存與釋放資源(1)保存圖片cv2.imwrite(filename,img)。參數(shù)說明:filename:要保存的文件名;img:要保存的圖像。cap.release()#釋放VideoCapturecv2.destroyAllWindows()#銷毀所有的窗口(2)釋放資源cap.release():停止捕獲視頻,用cv2.VideoCapture(0)創(chuàng)建對象,操作結(jié)束后要用cap.release()來釋放資源,否則會占用攝像頭導致攝像頭無法被其他程序使用;cv2.destroyAllWindows():用來刪除所有窗口。職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一OpenCV實現(xiàn)圖像的讀取與保存任務(wù)檢查與評價06序號評價內(nèi)容評價標準分值得分1知識運用(20%)掌握相關(guān)理論知識,理解本次任務(wù)要求,制定詳細計劃,計劃條理清晰,邏輯正確(20分)20分
理解相關(guān)理論知識,能根據(jù)本次任務(wù)要求、制定合理計劃(15分)了解相關(guān)理論知識,有制定計劃(10分)無制定計劃(0分)2專業(yè)技能(40%)完成創(chuàng)建攝像頭實例、設(shè)置與創(chuàng)建顯示畫面、圖像讀取與顯示、圖像保存與釋放資源。(40分)40分
完成創(chuàng)建攝像頭實例、設(shè)置與創(chuàng)建顯示畫面、圖像讀取與顯示。(30分)完成創(chuàng)建攝像頭實例、設(shè)置與創(chuàng)建顯示畫面。(20分)完成創(chuàng)建攝像頭實例。(10分)沒有創(chuàng)建攝像頭實例。(0分)3核心素養(yǎng)(20%)具有良好的自主學習能力、分析解決問題的能力、整個任務(wù)過程中有指導他人(20分)20分
具有較好的學習能力和分析解決問題的能力,任務(wù)過程中無指導他人(15分)能夠主動學習并收集信息,有請教他人進行解決問題的能力(10分)不主動學習(0分)4課堂紀律(20%)設(shè)備無損壞、設(shè)備擺放整齊、工位區(qū)域內(nèi)保持整潔、無干擾課堂秩序(20分)20分
設(shè)備無損壞、無干擾課堂秩序(15分)無干擾課堂秩序(10分)干擾課堂秩序(0分)總得分1、請參照評價標準完成自評和對其他小組的互評。2、各組請代表分析本組任務(wù)實施經(jīng)驗。職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一OpenCV實現(xiàn)圖像的讀取與保存任務(wù)小結(jié)07職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)一OpenCV實現(xiàn)圖像的讀取與保存任務(wù)拓展08使用dWindow創(chuàng)建兩個圖像顯示窗口,實現(xiàn)下列功能:1窗口1名稱為“win1”,窗口2名稱為“win2”;1.創(chuàng)建窗口時,將窗口名稱設(shè)置為第一個參數(shù);2.cv2.imshow()的第一個參數(shù)為要顯示圖像的窗口名稱。解題
思路提示任務(wù)要求2采集的圖像顯示在窗口2上。謝謝大家學習項目一使用OpenCV實現(xiàn)人臉檢測嵌入式人工智能技術(shù)應用線程的調(diào)用任務(wù)二職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二線程的調(diào)用了解線程原理;能夠編寫自定義線程類并進行調(diào)試。能使用Thread方法實例化線程;能使用實例化線程的start方法啟動線程;能使用標志位退出線程;能使用自定義類繼承Thread實例化線程。職業(yè)能力目標01知識目標技能目標職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二線程的調(diào)用
本實驗將實現(xiàn)用線程類和繼承線程類兩種方式啟動線程,并執(zhí)行線程任務(wù)。任務(wù)描述任務(wù)要求使用Thread方法實例化線程;使用實例化線程的start方法啟動線程;使用標志位退出線程;使用自定義類繼承Thread實例化線程。任務(wù)描述與要求02職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二線程的調(diào)用任務(wù)分析談?wù)劸€程和進程之間的關(guān)系,他們有什么區(qū)別?回憶一下Thread類的幾種常用方法?任務(wù)分析與計劃03任務(wù)計劃表項目名稱使用OpenCV實現(xiàn)人臉檢測任務(wù)名稱線程的調(diào)用計劃方式自主設(shè)計計劃要求請用5個計劃步驟來完整描述出如何完成本次任務(wù)序號任務(wù)計劃1
2
3
4
5
通過上面的思考,你是否對本任務(wù)要完成的工作有所了解?讓我們一起來制訂完成本次任務(wù)的實施計劃吧!任務(wù)分析與計劃03職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08線程的調(diào)用04知識儲備線程threading庫23進程1進程04進程指正在運行的程序。每一個進程提供執(zhí)行程序所需的所有資源。每個還要有至少一個線程,因為每一個進程啟動時都會最先產(chǎn)生一個線程,即主線程,然后主線程可以再創(chuàng)建其他的子線程。進程04
進程(Process)是計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。
在早期面向進程設(shè)計的計算機結(jié)構(gòu)中,進程是程序的基本執(zhí)行實體;在當代面向線程設(shè)計的計算機結(jié)構(gòu)中,進程是線程的容器。
進程的概念進程04狹義定義:進程是正在運行的程序的實例(aninstanceofacomputerprogramthatisbeingexecuted)。廣義定義:進程是一個具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合的一次運行活動。它是操作系統(tǒng)動態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中,進程既是基本的分配單元,也是基本的執(zhí)行單元。進程的定義進程04進程的狀態(tài)1、三態(tài)模型一般來說,按進程在執(zhí)行過程中的不同情況至少要定義三種不同的進程狀態(tài):(1)運行(running)態(tài):進程占有處理器正在運行;(2)就緒(ready)態(tài):進程具備運行條件,等待系統(tǒng)分配處理器以便運行;(3)等待(wait)態(tài):又稱為阻塞(blocked)態(tài)或睡眠(sleep)態(tài),指進程不具備運行條件,正在等待某個事件的完成。進程04進程的狀態(tài)1、五態(tài)模型在一個實際的系統(tǒng)里進程的狀態(tài)及其轉(zhuǎn)換比上節(jié)敘述的復雜一些,例如,引入專門的新建態(tài)(new)和終止態(tài)(exit)。線程04知識儲備進程21threading庫3線程是操作系統(tǒng)能夠進行運算調(diào)度的最小單位,是進程中的實際執(zhí)行單元,負責當前進程中程序的執(zhí)行,一個進程中至少有一個線程,一個進程中可以包含多個線程,可以稱之為多線程程序。
由于線程是操作系統(tǒng)直接支持的執(zhí)行單元,因此,高級語言通常都內(nèi)置多線程的支持,
Python也不例外,并且,Python的線程是真正的PosixThread,而不是模擬出來的線程。04線程思考一下,針對多任務(wù)我們該怎么減少計算時間?在多線程OS中,通常是在一個進程中包括多個線程,每個線程都是作為利用CPU的基本單位,是花費最小開銷的實體。線程具有以下屬性:1)輕型實體;2)獨立調(diào)度和分派的基本單位;3)可并發(fā)執(zhí)行;4)共享進程資源。04線程線程的特點1)地址空間和其它資源(如打開文件):進程間相互獨立,同一進程的各線程間共享。某進程內(nèi)的線程在其它進程不可見;2)通信:進程間通信IPC,線程間可以直接讀寫進程數(shù)據(jù)段(如全局變量)來進行通信——需要進程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性;3)調(diào)度和切換:線程上下文切換比進程上下文切換要快得多;4)在多線程OS中,進程不是一個可執(zhí)行的實體。04線程與進程的區(qū)別線程04知識儲備進程21threading庫3threading庫04
進程有可以擁有多個線程,所以threading庫提供了管理多個線程執(zhí)行的API,允許程序在同一個進程空間并發(fā)地運行多個操作。
threading庫是python的多線程庫,利用threading庫我們可以輕松實現(xiàn)多線程任務(wù)。Python的標準庫提供了兩個模塊:
_thread
和
threading
_thread是低級模塊,threading是高級模塊,對_thread進行了封裝。
絕大多數(shù)情況下,我們只需要使用threading這個高級模塊。
threading模塊中最核心的內(nèi)容是Thread這個類。
創(chuàng)建Thread對象,然后執(zhí)行線程,每個Thread對象代表一個線程,每個線程可以讓程序處理不同的任務(wù),這就是多線程編程。04threading庫04threading庫線程對象遞歸鎖對象鎖對象柵欄對象事件對象定時器對象threading模塊中包含了關(guān)于線程操作的豐富功能threading.Thread(group,target=None,name=None,args=(),kwargs={},daemon=None)職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二線程的調(diào)用啟動線程的第一種方式2初識線程2105啟動線程的第二種方式3初識線程05importthreadingimporttime進程是由若干線程組成的,一個進程至少有一個線程。多任務(wù)可以由多進程完成,也可以由一個進程內(nèi)的多線程完成,每條線程并行執(zhí)行不同的任務(wù)。由于線程是操作系統(tǒng)直接支持的執(zhí)行單元,因此,高級語言通常都內(nèi)置多線程的支持,Python也不例外,并且,Python的線程是真正的PosixThread,而不是模擬出來的線程。Python的標準庫提供了兩個模塊:_thread和threading,_thread是低級模塊,threading是高級模塊,對_thread進行了封裝。絕大多數(shù)情況下,我們只需要使用threading這個高級模塊。threading模塊中最核心的內(nèi)容是Thread這個類。創(chuàng)建Thread對象,然后執(zhí)行線程,每個Thread對象代表一個線程,每個線程可以讓程序處理不同的任務(wù),這就是多線程編程。啟動線程的第一種方式2初識線程2105啟動線程的第二種方式32線程退出1創(chuàng)建自定義函數(shù)啟動線程的第一種方式05啟動線程的第一種方式第一種方式:創(chuàng)建線程要執(zhí)行的函數(shù),把這個函數(shù)傳遞進Thread對象里,讓它來執(zhí)行。即直接創(chuàng)建Thread對象。函數(shù)可以通過threading.Thread(target)方法傳遞進Thread對象里,進而啟動線程。threading.Thread(target):用于創(chuàng)建線程。參數(shù)說明:target:是線程函數(shù)變量參數(shù),用于傳入函數(shù)參數(shù)。啟動線程的第一種方式05defVideo():print("這是一個線程")1.創(chuàng)建自定義函數(shù)(1)創(chuàng)建函數(shù)Video()t=threading.Thread(target=Video)(2)實例化線程t.start()(3)啟動線程啟動線程的第一種方式05working=TruedefVideo():whileworking:print("這是一個線程")time.sleep(2)print("線程已退出")t=threading.Thread(target=Video)t.start()2.線程退出threading模塊并沒有提供停止線程的方法,一旦線程對象調(diào)用start()方法后,只能等到對應的方法函數(shù)運行完畢,線程才能停止。如果線程中有循環(huán)的話,線程將會一直執(zhí)行,直到循環(huán)結(jié)束,再運行循環(huán)后的語句。因此如果需要提前退出線程,即要先退出循環(huán),一般的方法就是循環(huán)地判斷一個標志位working,一旦標志位到達到預定的值,就退出循環(huán)。這樣就能做到退出線程了。設(shè)置一個標志位變量working,初始值賦為True。定義了函數(shù)Video(),當標志位working為True時,該函數(shù)將循環(huán)打印。將函數(shù)Video()作為參數(shù)傳入threading.Thread中實例化一個Thread對象,賦值為t。working=False啟動線程的第一種方式2初識線程2105啟動線程的第二種方式3啟動線程的第二種方式05第二種方式:直接從Thread繼承,創(chuàng)建一個新的class,把線程執(zhí)行的代碼放到這個新的class里。即編寫一個自定義類繼承Thread,然后復寫run()方法,在run()方法中編寫任務(wù)處理代碼,然后創(chuàng)建這個Thread的子類。將函數(shù)封裝成線程類,便于線程的調(diào)用與停止,大多用于這種方式來啟動線程,屬于面向?qū)ο缶幊?。self:Python中就規(guī)定,函數(shù)的第一個參數(shù),就必須是實例對象本身,并且建議,約定俗成,把其名字寫為self,以self為前綴的變量都可供類中的所有方法使用;def__init__(self):在實例化類時定義變量;super:函數(shù)是用于調(diào)用父類(超類)的一個方法。這里表示繼承線程類threading.Thread。defrun(self):把要執(zhí)行的代碼寫到run函數(shù)里面,線程在創(chuàng)建后,通過.start()會直接運行run函數(shù);退出線程的方式:在類中定義標志位,通過編寫stop函數(shù)來控制標志位,達到退出循環(huán)。這樣就能做到退出線程了。defstop(self):線程停止函數(shù),用于控制標志位變量,從而達到控制線程。啟動線程的第二種方式05classvideoThread(threading.Thread):def__init__(self):super(videoThread,self).__init__()self.working=True#循環(huán)標志位
defrun(self):#start()后運行run函數(shù)
whileself.working:print("這是一個線程")time.sleep(2)defstop(self):self.working=Falseprint("退出線程")(1)定義線程類a=videoThread()(2)實例化線程類a.start()(3)啟動線程a.stop()(4)關(guān)閉線程職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二線程的調(diào)用任務(wù)檢查與評價06序號評價內(nèi)容評價標準分值得分1知識運用(20%)掌握相關(guān)理論知識,理解本次任務(wù)要求,制定詳細計劃,計劃條理清晰,邏輯正確(20分)20分
理解相關(guān)理論知識,能根據(jù)本次任務(wù)要求、制定合理計劃(15分)了解相關(guān)理論知識,有制定計劃(10分)無制定計劃(0分)2專業(yè)技能(40%)完成線程第一種啟動方式、線程第二種啟動方式。(40分)40分
完成線程第一種啟動方式。(20分)沒有線程第一種啟動方式。(0分)3核心素養(yǎng)(20%)具有良好的自主學習能力、分析解決問題的能力、整個任務(wù)過程中有指導他人(20分)20分
具有較好的學習能力和分析解決問題的能力,任務(wù)過程中無指導他人(15分)能夠主動學習并收集信息,有請教他人進行解決問題的能力(10分)不主動學習(0分)4課堂紀律(20%)設(shè)備無損壞、設(shè)備擺放整齊、工位區(qū)域內(nèi)保持整潔、無干擾課堂秩序(20分)20分
設(shè)備無損壞、無干擾課堂秩序(15分)無干擾課堂秩序(10分)干擾課堂秩序(0分)總得分1、請參照評價標準完成自評和對其他小組的互評。2、各組請代表分析本組任務(wù)實施經(jīng)驗。職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二線程的調(diào)用任務(wù)小結(jié)07職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)二線程的調(diào)用任務(wù)拓展08采用方式2調(diào)用線程,實現(xiàn)下列功能:1執(zhí)行函數(shù)Video無限循環(huán)每隔2秒打印“這是一個xx線程”,xx為傳入的參數(shù)值,比如傳入”測試”;1.__init__()方法要設(shè)置參數(shù);2.用self.xxx來接收傳入的參數(shù)。解題
思路提示任務(wù)要求2能停止線程。謝謝大家學習項目一使用OpenCV實現(xiàn)人臉檢測嵌入式人工智能技術(shù)應用OpenCV實現(xiàn)視頻流的調(diào)用任務(wù)三職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三OpenCV實現(xiàn)視頻流的調(diào)用掌握視頻流的調(diào)用方法。能使用opencv和while循環(huán)構(gòu)建視頻流。職業(yè)能力目標01知識目標技能目標職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三OpenCV實現(xiàn)視頻流的調(diào)用
本實驗將實現(xiàn)在觸摸屏實時顯示USB攝像頭采集的畫面。任務(wù)描述任務(wù)要求觸摸屏能實時顯示USB攝像頭采集的畫面;能隨時退出視頻流調(diào)用。任務(wù)描述與要求02職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三使用OpenCV實現(xiàn)人臉檢測任務(wù)分析實現(xiàn)opencv調(diào)用視頻流可能會涉及到哪些步驟?根據(jù)自己的了解說說視頻和圖像之間的關(guān)系?任務(wù)分析與計劃03任務(wù)計劃表項目名稱使用OpenCV實現(xiàn)人臉檢測任務(wù)名稱OpenCV實現(xiàn)視頻流的調(diào)用計劃方式自主設(shè)計計劃要求請用6個計劃步驟來完整描述出如何完成本次任務(wù)序號任務(wù)計劃1
2
3
4
5
6
通過上面的思考,你是否對本任務(wù)要完成的工作有所了解?讓我們一起來制訂完成本次任務(wù)的實施計劃吧!任務(wù)分析與計劃03職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三OpenCV實現(xiàn)視頻流的調(diào)用04知識儲備線程threading庫23進程1進程04進程指正在運行的程序。每一個進程提供執(zhí)行程序所需的所有資源。每個還要有至少一個線程,因為每一個進程啟動時都會最先產(chǎn)生一個線程,即主線程,然后主線程可以再創(chuàng)建其他的子線程。進程04
進程(Process)是計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。
在早期面向進程設(shè)計的計算機結(jié)構(gòu)中,進程是程序的基本執(zhí)行實體;在當代面向線程設(shè)計的計算機結(jié)構(gòu)中,進程是線程的容器。
進程的概念進程04狹義定義:進程是正在運行的程序的實例(aninstanceofacomputerprogramthatisbeingexecuted)。廣義定義:進程是一個具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合的一次運行活動。它是操作系統(tǒng)動態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中,進程既是基本的分配單元,也是基本的執(zhí)行單元。進程的定義進程04進程的狀態(tài)1、三態(tài)模型一般來說,按進程在執(zhí)行過程中的不同情況至少要定義三種不同的進程狀態(tài):(1)運行(running)態(tài):進程占有處理器正在運行。(2)就緒(ready)態(tài):進程具備運行條件,等待系統(tǒng)分配處理器以便運行。(3)等待(wait)態(tài):又稱為阻塞(blocked)態(tài)或睡眠(sleep)態(tài),指進程不具備運行條件,正在等待某個事件的完成。進程04進程的狀態(tài)1、五態(tài)模型在一個實際的系統(tǒng)里進程的狀態(tài)及其轉(zhuǎn)換比上節(jié)敘述的復雜一些,例如,引入專門的新建態(tài)(new)和終止態(tài)(exit)。線程04知識儲備進程21threading庫3線程是操作系統(tǒng)能夠進行運算調(diào)度的最小單位,是進程中的實際執(zhí)行單元,負責當前進程中程序的執(zhí)行,一個進程中至少有一個線程,一個進程中可以包含多個線程,可以稱之為多線程程序。
由于線程是操作系統(tǒng)直接支持的執(zhí)行單元,因此,高級語言通常都內(nèi)置多線程的支持,
Python也不例外,并且,Python的線程是真正的PosixThread,而不是模擬出來的線程。04線程思考一下,針對多任務(wù)我們該怎么減少計算時間?在多線程OS中,通常是在一個進程中包括多個線程,每個線程都是作為利用CPU的基本單位,是花費最小開銷的實體。線程具有以下屬性:1)輕型實體2)獨立調(diào)度和分派的基本單位。3)可并發(fā)執(zhí)行。4)共享進程資源。04線程線程的特點1)地址空間和其它資源(如打開文件):進程間相互獨立,同一進程的各線程間共享。某進程內(nèi)的線程在其它進程不可見。2)通信:進程間通信IPC,線程間可以直接讀寫進程數(shù)據(jù)段(如全局變量)來進行通信——需要進程同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性。3)調(diào)度和切換:線程上下文切換比進程上下文切換要快得多。4)在多線程OS中,進程不是一個可執(zhí)行的實體。04線程與進程的區(qū)別線程04知識儲備進程21threading庫3threading庫04
進程有可以擁有多個線程,所以threading庫提供了管理多個線程執(zhí)行的API,允許程序在同一個進程空間并發(fā)地運行多個操作。
threading庫是python的多線程庫,利用threading庫我們可以輕松實現(xiàn)多線程任務(wù)。Python的標準庫提供了兩個模塊:
_thread
和
threading
_thread是低級模塊,threading是高級模塊,對_thread進行了封裝。
絕大多數(shù)情況下,我們只需要使用threading這個高級模塊。
threading模塊中最核心的內(nèi)容是Thread這個類。
創(chuàng)建Thread對象,然后執(zhí)行線程,每個Thread對象代表一個線程,每個線程可以讓程序處理不同的任務(wù),這就是多線程編程。04threading庫04threading庫線程對象遞歸鎖對象鎖對象柵欄對象事件對象定時器對象threading模塊中包含了關(guān)于線程操作的豐富功能threading.Thread(group,target=None,name=None,args=(),kwargs={},daemon=None)職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三OpenCV實現(xiàn)視頻流的調(diào)用回顧線程的調(diào)用2回顧圖像的讀取與保存2105OpenCV讀入USB攝像頭拍攝的畫面顯示至開發(fā)板3回顧圖像的讀取與保存05importcv2#引入opencv庫函數(shù)importtime#打開攝像頭cap=cv2.VideoCapture(0)print("攝像頭是否已經(jīng)打開?{}".format(cap.isOpened()))#畫面寬度設(shè)定為1920高度度設(shè)定為1080cap.set(cv2.CAP_PROP_FRAME_WIDTH,1920)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)#構(gòu)建視頻的窗口dWindow('image_win',flags=cv2.WINDOW_NORMAL|cv2.WINDOW_KEEPRATIO)cv2.setWindowProperty('image_win',cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)#全屏展示#讀取攝像頭圖像ret,frame=cap.read()#更新窗口“image_win”中的圖片cv2.imshow('image_win',frame)#等待按鍵事件發(fā)生等待5000mscv2.waitKey(5000)#保存圖片cv2.imwrite("./exp/img_3.1.png",frame)#釋放VideoCapturecap.release()#銷毀所有的窗口cv2.destroyAllWindows()回顧線程的調(diào)用2回顧圖像的讀取與保存2105OpenCV讀入USB攝像頭拍攝的畫面顯示至開發(fā)板3啟動線程的第二種方式05classvideoThread(threading.Thread):def__init__(self):super(videoThread,self).__init__()self.working=True#循環(huán)標志位
defrun(self):#start()后運行run函數(shù)
whileself.working:print("這是一個線程")time.sleep(2)defstop(self):self.working=Falseprint("退出線程")(1)定義線程類a=videoThread()(2)實例化線程類a.start()(3)啟動線程a.stop()(4)關(guān)閉線程回顧線程的調(diào)用2回顧圖像的讀取與保存2105OpenCV讀入USB攝像頭拍攝的畫面顯示至開發(fā)板3OpenCV讀入USB攝像頭拍攝的畫面顯示至開發(fā)板05(1)定義線程類通過結(jié)合任務(wù)1和任務(wù)2中的內(nèi)容,使用OpenCV從USB攝像頭讀取視頻流,并在開發(fā)板中顯示出來。OpenCV讀入USB攝像頭拍攝的畫面顯示至開發(fā)板05a=videoThread()(2)實例化線程類實例化一個videoThread()線程類,實例化對象為a。a.start()(3)啟動線程線程對象a調(diào)用start()方法,開始執(zhí)行videoThread()線程類中的run()函數(shù)。a.stop()(4)關(guān)閉線程實例化對象a調(diào)用videoThread()線程類中的stop()函數(shù),來退出線程。職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三OpenCV實現(xiàn)視頻流的調(diào)用任務(wù)檢查與評價06序號評價內(nèi)容評價標準分值得分1知識運用(20%)掌握相關(guān)理論知識,理解本次任務(wù)要求,制定詳細計劃,計劃條理清晰,邏輯正確(20分)20分
理解相關(guān)理論知識,能根據(jù)本次任務(wù)要求、制定合理計劃(15分)了解相關(guān)理論知識,有制定計劃(10分)無制定計劃(0分)2專業(yè)技能(40%)完成回顧圖像的讀取與保存、回顧線程的調(diào)用、視頻流圖像的顯示與退出。(40分)40分
完成回顧圖像的讀取與保存、回顧線程的調(diào)用。(30分)完成回顧圖像的讀取與保存。(20分)沒有完成回顧圖像的讀取與保存。(0分)3核心素養(yǎng)(20%)具有良好的自主學習能力、分析解決問題的能力、整個任務(wù)過程中有指導他人(20分)20分
具有較好的學習能力和分析解決問題的能力,任務(wù)過程中無指導他人(15分)能夠主動學習并收集信息,有請教他人進行解決問題的能力(10分)不主動學習(0分)4課堂紀律(20%)設(shè)備無損壞、設(shè)備擺放整齊、工位區(qū)域內(nèi)保持整潔、無干擾課堂秩序(20分)20分
設(shè)備無損壞、無干擾課堂秩序(15分)無干擾課堂秩序(10分)干擾課堂秩序(0分)總得分1、請參照評價標準完成自評和對其他小組的互評。2、各組請代表分析本組任務(wù)實施經(jīng)驗。職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三使用OpenCV實現(xiàn)人臉檢測任務(wù)小結(jié)07職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三OpenCV實現(xiàn)視頻流的調(diào)用任務(wù)拓展081反復讀取指定文件夾里的圖片形成視頻流。任務(wù)要求謝謝大家學習項目一使用OpenCV實現(xiàn)人臉檢測嵌入式人工智能技術(shù)應用OpenCV進行視頻錄制與視頻讀取任務(wù)四職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)四OpenCV進行視頻錄制與視頻讀取了解opencv錄制和讀取視頻原理;了解基礎(chǔ)的視頻格式與FourCC。能使用VideoWriter_fourcc方法設(shè)置視頻編解碼的方式;能使用VideoWriter方法進行視頻錄制;能使用VideoCapture方法讀取視頻。職業(yè)能力目標01知識目標技能目標職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三OpenCV進行視頻錄制與視頻讀取
本實驗將實現(xiàn)把USB攝像頭實時采集并顯示在觸摸屏的畫面存成視頻文件,以及讀取avi格式的視頻。任務(wù)描述任務(wù)要求將USB攝像頭采集的畫面按照指定路徑和文件名存為視頻文件;讀取指定路徑下的視頻文件,在notebook呈現(xiàn)視頻畫面。任務(wù)描述與要求02職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三OpenCV進行視頻錄制與視頻讀取任務(wù)分析實現(xiàn)opencv錄制和讀取視頻可能會涉及到哪些步驟?根據(jù)自己的了解說說視頻有哪些參數(shù)?任務(wù)分析與計劃03任務(wù)計劃表項目名稱使用OpenCV實現(xiàn)人臉檢測任務(wù)名稱OpenCV進行視頻錄制與視頻讀取計劃方式自主設(shè)計計劃要求請用6個計劃步驟來完整描述出如何完成本次任務(wù)序號任務(wù)計劃1
2
3
4
5
6
通過上面的思考,你是否對本任務(wù)要完成的工作有所了解?讓我們一起來制訂完成本次任務(wù)的實施計劃吧!任務(wù)分析與計劃03職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)三OpenCV進行視頻錄制與視頻讀取04知識儲備FourCC2視頻編碼1VideoWriter()3視頻編碼04所謂視頻編碼方式就是指通過壓縮技術(shù),將原始視頻格式的文件轉(zhuǎn)換成另一種視頻格式文件的方式。由于連續(xù)的幀之間相似性極高,為便于儲存?zhèn)鬏?,我們需要對原始的視頻進行編碼壓縮,以去除空間、時間維度的冗余。視頻編碼04
視頻編碼格式也稱為視頻文件格式,是針對不同平臺、程序和設(shè)備優(yōu)化數(shù)字視頻文件的方法。視頻編碼格式有許多種類,但每一種都包含兩個主要組成部分,即編解碼器和容器。編解碼器和容器指定了存儲、傳輸和觀看未壓縮視頻輸入的方式。在流式傳輸中有一點很重要,編碼格式應與盡可能廣泛的設(shè)備兼容,以便所有用戶都可以觀看流視頻。
正確選擇視頻格式取決于三個主要因素:存儲可用性、視頻輸出質(zhì)量,以及與不同視頻播放器或程序的兼容性。什么是視頻編碼格式?FourCC04知識儲備視頻編碼213VideoWriter()
FourCC全稱Four-CharacterCodes,代表四字符代碼,它是一個32位的標示符,其實就是typedefunsignedintFOURCC,是一種獨立標示視頻數(shù)據(jù)流格式的四字符代碼。FourCC常用視頻編解碼如下。04FourCC標志作用VideoWriter_fourcc('D','I','V','X')MPEG-4編碼VideoWriter_fourcc('P','I','M','1')MPEG-1編碼VideoWriter_fourcc('M','J','P','G')JPEG編碼(運行效果一般)VideoWriter_fourcc('M','P','4','2')MPEG-4.2編碼VideoWriter_fourcc('D','I','V','3')MPEG-4.3編碼VideoWriter_fourcc('U','2','6','3')H263編碼VideoWriter_fourcc('I','2','6','3')H263I編碼VideoWriter_fourcc('F','L','V','1')FLV1編碼FourCC04知識儲備視頻編碼312VideoWriter()VideoWriter()04cv2.VideoWriter_fourcc(brief):用于設(shè)置視頻編解碼的方式brief:設(shè)置編解碼方式返回值:返回一個fourcc代碼VideoWriter(filename,fourcc,fps,frameSize):創(chuàng)建視頻流寫入對象filename:要保存的文件的路徑fourcc:fourcc指定編碼器fps:要保存的視頻的幀率frameSize:要保存的文件的畫面尺寸videoName變量定義為video_record.avi,字符串類型。codec變量定義為MJPG格式。fps變量定義為寫入幀率為20frameSize變量定義視頻幀大小為(640,480)職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)四OpenCV進行視頻錄制與視頻讀取05任務(wù)實施視頻讀取2視頻錄制142創(chuàng)建VideoWriter實例1創(chuàng)建videocapture實例3寫入幀圖像封裝成類進行視頻錄制視頻錄制05視頻錄制OpenCV可以針對攝像頭或視頻進行處理,將需要的畫面保留下來,保存成一個.avi的文件。OpenCV進行錄制視頻的相關(guān)操作,主要涉及OpenCV的VideoWriter對象,VideoWriter是用來創(chuàng)建視頻文件的類。注意:OpenCV只支持.avi的格式,而且生成的視頻文件不能大于2GB,而且不能添加音頻。視頻錄制05importcv21.創(chuàng)建videocapture實例(1)導入cv2python-opencv在python中的包名稱叫做cv2。cap=cv2.VideoCapture(0)(2)創(chuàng)建videocapture實例錄制視頻的第一步要實例化一個VideoCapture對象。用于從USB攝像頭讀入圖片。創(chuàng)建VideoCapture對象的時候,我們需要傳入一個合適的攝像頭編號。cv2.VideoCapture(0):0表示默認為筆記本上的攝像頭(如果有的話)/USB攝像頭。視頻錄制05video_path='./exp/video_record.avi'#指定視頻編解碼方式為MJPGcodec=cv2.VideoWriter_fourcc(*'MJPG')fps=20.0#指定寫入幀率為20frameSize=(640,480)#指定窗口大小#創(chuàng)建VideoWriter對象out=cv2.VideoWriter(video_path,codec,fps,frameSize)2.創(chuàng)建VideoWriter實例opencv中視頻錄制需要借助VideoWriter對象,其原理是將從VideoCapture中讀入圖片,不斷地寫入到VideoWrite的數(shù)據(jù)流中形成視頻。cv2.VideoWriter_fourcc(brief):用于設(shè)置視頻編解碼的方式。brief:設(shè)置編解碼方式。返回值:返回一個fourcc代碼。VideoWriter(filename,fourcc,fps,frameSize):創(chuàng)建視頻流寫入對象。filename:要保存的文件的路徑;fourcc:fourcc指定編碼器;fps:要保存的視頻的幀率;frameSize:要保存的文件的畫面尺寸。視頻錄制05ret,frame=cap.read()3.寫入幀圖像(1)讀取圖像使用cap.read()獲取一幀圖片,cap.read()返回值有兩個,分別賦值給ret,frame。ret:若畫面讀取成功,則返回True,反之返回False;frame:是讀取到的圖片對象(numpy的ndarray格式)。out.write(frame)(2)寫入幀圖像使用上述創(chuàng)建的out對象,調(diào)用.write()方法,將把VideoCapture中讀到的圖片寫入到VideoWrite的數(shù)據(jù)流中。cap.release()out.release()(3)最后資源釋放在錄制結(jié)束后,我們要釋放資源:cap.release():停止捕獲視頻;out.release():釋放創(chuàng)建視頻流寫入對象。視頻錄制054.封裝成線程類進行視頻錄制1、在init函數(shù)中傳入videoName參數(shù)用于傳入保存的視頻文件名,定義標志位變量、打開攝像頭、定義VideoWriter的3個參數(shù)并創(chuàng)建對象;2、使用本文1.5追加幀結(jié)合循環(huán),通過循環(huán)的方式反復的將讀取到的每一幀寫入到VideoWrite的數(shù)據(jù)流中,就能夠進行視頻錄制;3、在run函數(shù)中構(gòu)建視頻窗口:循環(huán)體里讀取攝像頭圖像、寫入幀圖像、更新顯示圖片、圖像顯示的時長。4、在stop函數(shù)中定義標志位變量、攝像頭釋放、釋放視頻流寫入對象、窗口釋放;5、用線程的方式運行函數(shù),再對視頻進行錄制與退出。視頻錄制05a=videoRecordThread('./exp/video_record.avi')a.start()4.封裝成線程類進行視頻錄制啟動線程實例化一個videoRecordThread()線程類,實例化時傳入視頻錄制要保存的文件名video_record.avi,實例化對象為a。線程對象a調(diào)用start()方法,開始執(zhí)行videoRecordThread()線程類中的run()函數(shù)。a.stop()關(guān)閉線程實例化對象a調(diào)用videoRecordThread()線程類中的stop()函數(shù),來退出線程,停止錄制。05任務(wù)實施視頻讀取2視頻錄制1視頻讀取051、在init函數(shù)中傳入videoName參數(shù)用于傳入讀取的視頻文件名,定義標志位變量、打開視頻文件;2、在run函數(shù)中構(gòu)建視頻窗口:循環(huán)體中讀取攝像頭圖像、更新顯示圖片、圖像顯示的時長;循環(huán)體結(jié)束后攝像頭釋放、窗口釋放。3、在stop函數(shù)中定義標志位變量、攝像頭釋放、窗口釋放;4、再對視頻進行播放。視頻讀取05a=videoReadThread('./exp/video_record.avi')a.start()啟動線程實例化一個videoReadThread()線程類,實例化時傳入視頻要讀取的文件名,這里文件名為上文保存的video_record.avi,實例化對象為a。線程對象a調(diào)用start()方法,開始執(zhí)行videoReadThread()線程類中的run()函數(shù)。。a.stop()關(guān)閉線程通過實例化對象a調(diào)用videoReadThread()線程類中的stop()函數(shù),來提前退出線程,停止播放。職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)四OpenCV進行視頻錄制與視頻讀取任務(wù)檢查與評價06序號評價內(nèi)容評價標準分值得分1知識運用(20%)掌握相關(guān)理論知識,理解本次任務(wù)要求,制定詳細計劃,計劃條理清晰,邏輯正確(20分)20分
理解相關(guān)理論知識,能根據(jù)本次任務(wù)要求、制定合理計劃(15分)了解相關(guān)理論知識,有制定計劃(10分)無制定計劃(0分)2專業(yè)技能(40%)完成導入包、讀取圖像、圖像錄制、視頻流錄制、視頻讀取。(40分)40分
完成導入包、讀取圖像、圖像錄制、視頻流錄制。(30分)完成導入包、讀取圖像、圖像錄制。(20分)完成導入包、讀取圖像。(10分)沒有完成導入包、讀取圖像。(0分)3核心素養(yǎng)(20%)具有良好的自主學習能力、分析解決問題的能力、整個任務(wù)過程中有指導他人(20分)20分
具有較好的學習能力和分析解決問題的能力,任務(wù)過程中無指導他人(15分)能夠主動學習并收集信息,有請教他人進行解決問題的能力(10分)不主動學習(0分)4課堂紀律(20%)設(shè)備無損壞、設(shè)備擺放整齊、工位區(qū)域內(nèi)保持整潔、無干擾課堂秩序(20分)20分
設(shè)備無損壞、無干擾課堂秩序(15分)無干擾課堂秩序(10分)干擾課堂秩序(0分)總得分1、請參照評價標準完成自評和對其他小組的互評。2、各組請代表分析本組任務(wù)實施經(jīng)驗。職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)四OpenCV進行視頻錄制與視頻讀取任務(wù)小結(jié)07職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)四OpenCV進行視頻錄制與視頻讀取任務(wù)拓展08創(chuàng)建兩個線程分別用于錄制視頻和讀取視頻,要求如下:1視頻存儲在當前路徑,格式為flv;1.視頻格式取決于FourCC;解題
思路提示任務(wù)要求2讀取前面錄制的flv格式視頻。謝謝大家學習項目一使用OpenCV實現(xiàn)人臉檢測嵌入式人工智能技術(shù)應用
圖像人臉檢測任務(wù)五職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)五圖像人臉檢測了解人臉檢測原理;理解HaarCascade級聯(lián)分類器的使用方法;理解ROI的定義。能使用imread方法讀取圖像;能使用cvtColor方法轉(zhuǎn)換圖像色彩;能使用CascadeClassifier方法加載HaarCascade模型檢測圖像人臉;能使用rectangle方法繪制人臉矩形框。職業(yè)能力目標01知識目標技能目標職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)五圖像人臉檢測
本實驗將實現(xiàn)用opencv自帶的人臉庫對讀取的圖片進行人臉檢測并標注人臉框。任務(wù)描述任務(wù)要求使用級聯(lián)分類器對單張圖像進行人臉檢測;基于線程類使用級聯(lián)分類器對USB攝像頭采集的畫面進行人臉檢測;標注人臉框并進行顯示。任務(wù)描述與要求02職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)五圖像人臉檢測任務(wù)分析實現(xiàn)人臉檢測可能會涉及到哪些步驟?根據(jù)自己的了解說說人臉檢測和人臉識別的區(qū)別?任務(wù)分析與計劃03任務(wù)計劃表項目名稱使用OpenCV實現(xiàn)人臉檢測任務(wù)名稱圖像人臉檢測計劃方式自主設(shè)計計劃要求請用8個計劃步驟來完整描述出如何完成本次任務(wù)序號任務(wù)計劃1
2
3
4
5
678
通過上面的思考,你是否對本任務(wù)要完成的工作有所了解?讓我們一起來制訂完成本次任務(wù)的實施計劃吧!任務(wù)分析與計劃03職業(yè)能力目標01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)五圖像人臉檢測04知識儲備Cascade模型2人臉檢測13ROI人臉檢測04
人臉檢測是指對于任意一幅給定的圖像,采用一定的策略對其進行搜索以確定其中是否含有人臉,如果是則返回人臉的位置、大小和姿態(tài)。
通過人臉檢測后再進行人臉識別就可以實現(xiàn)日常生活中應用。例如:掃臉解鎖手機,掃臉支付,掃臉開門。Cascade模型04知識儲備人臉檢測213ROICascade分類器04CascadeClassifier,是Opencv中做人臉檢測的時候的一個級聯(lián)分類器?,F(xiàn)在有兩種選擇:一是使用老版本的CvHaarClassifierCascade函數(shù),一是使用新版本的CascadeClassifier類。老版本的分類器只支持類Haar特征,而新版本的分類器既可以使用Haar,也可以使用LBP特征。CascadeClassifie級聯(lián)分類器Cascade分類器04OpenCV中人臉識別是通過Haar特征的級聯(lián)分類器
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版智能安防系統(tǒng)建設(shè)合同3篇
- 二零二五版家具回收與環(huán)保處理服務(wù)合同2篇
- 2024版網(wǎng)絡(luò)技術(shù)服務(wù)外包合同
- 二零二五版建筑保溫施工與智能家居系統(tǒng)集成合同3篇
- 二零二五年度環(huán)保型廣告牌銷售、安裝及廣告內(nèi)容合作合同3篇
- 2024版城市軌道交通設(shè)施維修保養(yǎng)合同
- 二零二五年度駕駛員押運員安全責任與聘用合同3篇
- 二零二五版文化創(chuàng)意產(chǎn)業(yè)擔保合同協(xié)議書2篇
- 2024版?zhèn)€人資金借用詳細協(xié)議協(xié)議版
- 二手房定金合同格式范文(2024版)
- 高一學生心理素質(zhì)描述【6篇】
- 給男友的道歉信10000字(十二篇)
- 2020年高級統(tǒng)計實務(wù)與案例分析真題及答案
- 全面質(zhì)量管理(TQM)基本知識
- 練字本方格模板
- 產(chǎn)品供貨質(zhì)量保障措施
- 電力電纜高頻局放試驗報告
- JJG 517-2016出租汽車計價器
- JJF 1914-2021金相顯微鏡校準規(guī)范
- GB/T 32045-2015節(jié)能量測量和驗證實施指南
- GB/T 10001.6-2021公共信息圖形符號第6部分:醫(yī)療保健符號
評論
0/150
提交評論