⑴ python如何圖像識別
首先,先定位好問題是屬於圖像識別任務中的哪一類,最好上傳一張植物葉子的圖片。因為目前基於深度學習的卷積神經網路(CNN)確實在圖像識別任務中取得很好的效果,深度學習屬於機器學習,其研究的範式,或者說處理圖像的步驟大體上是一致的。
1、第一步,准備好數據集,這里是指,需要知道輸入、輸出(視任務而定,針對你這個問題,建議使用有監督模型)是什麼。你可以准備一個文件夾,裡面存放好植物葉子的圖像,而每張圖像對應一個標簽(有病/沒病,或者是多類別標簽,可能具體到哪一種病)。
具體實現中,會將數據集分為三個:訓練集(計算模型參數)、驗證集(調參,這個經常可以不需要實現劃分,在python中可以用scikit-learn中的函數解決。測試集用於驗證模型的效果,與前面兩個的區別是,模型使用訓練集和驗證集時,是同時使用了輸入數據和標簽,而在測試階段,模型是用輸入+模型參數,得到的預測與真實標簽進行對比,進而評估效果。
2、確定圖像識別的任務是什麼?
圖像識別的任務可以分為四個:圖像分類、目標檢測、語義分割、實例分割,有時候是幾個任務的結合。
圖像分類是指以圖像為輸入,輸出對該圖像內容分類的描述,可以是多分類問題,比如貓狗識別。通過足夠的訓練數據(貓和狗的照片-標簽,當然現在也有一系列的方法可以做小樣本訓練,這是細節了,這里並不敞開講),讓計算機/模型輸出這張圖片是貓或者狗,及其概率。當然,如果你的訓練數據還有其它動物,也是可以的,那就是圖像多分類問題。
目標檢測指將圖像或者視頻中的目標與不感興趣的部分區分開,判斷是否存在目標,並確定目標的具體位置。比如,想要確定這只狗所佩戴的眼睛的位置,輸入一張圖片,輸出眼睛的位置(可視化後可以講目標區域框出來)。
看到這里,應該想想植物葉子診斷疾病的問題,只需要輸入一整張植物葉子的圖片,輸出是哪種疾病,還是需要先提取葉子上某些感興趣區域(可能是病變區域),在用病變區域的特徵,對應到具體的疾病?
語義分割是當今計算機視覺領域的關鍵問題之一,宏觀上看,語義分割是一項高層次的任務。其目的是以一些原始圖像作為輸入,輸出具有突出顯示的感興趣的掩膜,其實質上是實現了像素級分類。對於輸入圖片,輸出其舌頭區域(注意可以是不規則的,甚至不連續的)。
而實例分割,可以說是在語義分割的基礎上,在像素層面給出屬於每個實例的像素。
看到這里,可以具體思考下自己的問題是對應其中的哪一類問題,或者是需要幾種任務的結合。
3、實際操作
可以先通過一個簡單的例子入手,先了解構建這一個框架需要准備什麼。手寫數字識別可以說是深度學習的入門數據集,其任務也經常作為該領域入門的案例,也可以自己在網上尋找。
⑵ python怎麼讀取視屏文件的信息
用python讀取視頻有兩種主要方法,大家可依據自己的需求進行使用。
方法一:
使用imageio庫,沒有安裝的可用pip安裝或自己下載。自己下載的話給大家推薦一個鏡像網站:[pip鏡像](mageio/%20python%E5%BA%93%E9%95%9C%E5%83%8F%E7%BD%91%E7%AB%99),安裝好後重啟終端即可調用。1234
import pylabimport imageio#視頻的絕對路徑filename = '/path/to/your/video.mp4'#可以選擇解碼工具vid = imageio.get_reader(filename, 'ffmpeg')for im in enumerate(vid): #image的類型是mageio.core.util.Image可用下面這一注釋行轉換為arrary
#image = skimage.img_as_float(im).astype(np.float32)
fig = pylab.figure()
fig.suptitle('image #{}'.format(num), fontsize=20)
pylab.imshow(image)
pylab.show()12345678910111213
方法二:
用cv2庫,用這種方法的好處是返回的就是arrary,不用轉換,但方法一可以指定顯示某一幀,而這種方法是從頭讀到尾。
import numpy as npimport matplotlib.pyplot as pltimport pylabimport imageioimport skimage.ioimport numpy as np
import cv2
cap = cv2.VideoCapture('/path/to/your/video.mp4')
while(cap.isOpened()):
ret, frame = cap.read()
cv2.imshow('image', frame)
k = cv2.waitKey(20)
#q鍵退出
if (k & 0xff == ord('q')):
break cap.release()
cv2.destroyAllWindows()
大家可能注意到,兩種方法的顯示方法也是不一樣的,這里不詳細展開,實踐一下便很清楚了。
⑶ python或者C++有提取視頻關鍵幀的庫或者函數嗎
這個網上應該有開源的吧
⑷ python 怎麼把爬到的圖片保存下來
#建立單級目錄
filename=r'E:\NASDownload\視頻\一行代碼爬視頻\爬取圖片以此
for i in range(0,len(imageinfo)):
path="{}{}{}{}".format(filename,'\\',i,'.jpg')
res=requests.get(url=imageinfo[i]).content
time.sleep(5)
with open(path,'wb') as f:
f.write(res)
f.close()
⑸ 如何用python實現視頻關鍵幀提取並保存為圖片
import cv2
vc = cv2.VideoCapture('Test.avi') #讀入視頻文件
c=1
if vc.isOpened(): #判斷是否正常打開
rval , frame = vc.read()
else:
rval = False
timeF = 1000 #視頻幀計數間隔頻率
while rval: #循環讀取視頻幀
rval, frame = vc.read()
if(c%timeF == 0): #每隔timeF幀進行存儲操作
cv2.imwrite('image/'+str(c) + '.jpg',frame) #存儲為圖像
c = c + 1
cv2.waitKey(1)
vc.release()
拓展:
1、Python(英語發音:/ˈpaɪθən/), 是一種面向對象、解釋型計算機程序設計語言,由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年,Python 源代碼同樣遵循 GPL(GNU General Public License)協議。Python語法簡潔而清晰,具有豐富和強大的類庫。它常被昵稱為膠水語言,能夠把用其他語言製作的各種模塊(尤其是C/C++)很輕松地聯結在一起。
2、常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),然後對其中有特別要求的部分,用更合適的語言改寫,比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C/C++重寫,而後封裝為Python可以調用的擴展類庫。需要注意的是在您使用擴展類庫時可能需要考慮平台問題,某些可能不提供跨平台的實現。
⑹ python的opencv,如何用imread讀取視頻的每一幀
1:可以使用opencv讀取。
2:其代碼如下:
#includehighgui.h
#includecv.h
//從攝像頭中讀入數據
int main(int argc,char** argv)
{
cvNamedWindow(Example1,CV_WINDOW_AUTOSIZE);
CvCapture* capture; //初始化一個CvCapture結構的指針
if(argc==1)
{
capture=cvCaptureFromCAM(0);//如果參數為1,則從攝像頭中讀入數據,並返回一個CvCapture的指針
} //註:《學習OpenCV》中此處用cvCreateCameraCapture為錯
else
{
capture=cvCreateFileCapture(argv[1]);
}
assert(capture!=NULL); //斷言(assert)使用,檢查capture是否為空指針,為假時程序退出,並列印錯誤消息
IplImage* frame;
while(1)
{
frame=cvQueryFrame(capture);//用於將下一幀視頻文件載入內存(實際是填充和更新CvCapture結構中),返回一個對應當前幀的指針
if(!frame)
break;
cvShowImage(Example1,frame);
char c=cvWaitKey(33);
if(c==27) break; //出發ESC鍵退出循環,讀入數據停止
}
cvReleaseCapture(capture);//釋放內存
cvDestroyWindow(Example1);
}
⑺ python opencv 將讀視頻的代碼改成讀圖片的代碼
importosimportcv2
img_root=''#這里寫你的文件夾路徑,比如:/home/youname/data/img/,注意最後一個文件夾要有斜杠fps=24#保存視頻的FPS,可以適當調整#可以用(*'DVIX')或(*'X264'),如果都不行先裝ffmepg:sudoapt-getinstallffmepgfourcc=cv2.VideoWriter_fourcc(*'MJPG')
videoWriter=cv2.VideoWriter('saveVideo.avi',fourcc,fps,(640,480))#最後一個是保存圖片的尺寸foriinrange(99):
frame=cv2.imread(img_root+str(i+1)+'.jpg')
videoWriter.write(frame)
videoWriter.release()
⑻ python OpenCV視頻拆分圖片代碼
應該是沒有讀進文件。使用opencv讀取視頻,圖片時經常遇到的問題,就是使用cv2.read時不管是否成功讀取文件,他都不會報錯,直到你對讀取到的數據處理時才會報錯。
看你的報錯,frame沒有賦值,說明vc.read()沒有正常執行,所以檢查一下的你的文件是否有問題或者路徑是否正確之類的。