




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第基于Python實(shí)現(xiàn)一鍵找出磁盤里所有貓照目錄前言1.準(zhǔn)備2.編寫代碼3.批量自動(dòng)識(shí)別4.完整代碼
前言
最近在整理我磁盤上的照片,發(fā)現(xiàn)不少貓照,突然覺得若能把這些貓照都挑出來,觀察它們的成長(zhǎng)軌跡也是一件不錯(cuò)的事情。一張一張的找實(shí)在是太費(fèi)勁了,能不能自動(dòng)化地找出來呢?
目標(biāo)檢測(cè),是許多計(jì)算機(jī)視覺應(yīng)用的重中之重,比如說我們上次的實(shí)例分割:Python20行代碼批量自動(dòng)摳圖,人體關(guān)鍵點(diǎn)提取、人臉識(shí)別等。而我們這一次,是要識(shí)別貓照。由于時(shí)間不多,我們沒有時(shí)間收集訓(xùn)練集,那么有沒有已經(jīng)訓(xùn)練好的目標(biāo)檢測(cè)模型呢?
這時(shí)候就要搬出paddlehub了,puddlehub有一個(gè)模型叫做YOLOv3,基于JosephRedmon和AliFarhadi提出的單階段檢測(cè)器。該檢測(cè)器與達(dá)到同樣精度的傳統(tǒng)目標(biāo)檢測(cè)方法相比,推斷速度能達(dá)到接近兩倍。
YOLOv3將輸入圖像分成S*S個(gè)格子,每個(gè)格子預(yù)測(cè)B個(gè)boundingbox,每個(gè)boundingbox預(yù)測(cè)內(nèi)容包括:Location(x,y,w,h)、ConfidenceScore和C個(gè)類別的概率,因此我們不僅能夠找出貓的照片,還能定位它的位置!甚至能自動(dòng)數(shù)出一張照片里有多少只貓!
1.準(zhǔn)備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細(xì)Python安裝指南進(jìn)行安裝。
(可選1)如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda,它內(nèi)置了Python和pip.
(可選2)此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn)
為了實(shí)現(xiàn)識(shí)別貓的功能,我們需要安裝paddlepaddle,進(jìn)入他們的官方網(wǎng)站就有詳細(xì)的指引
根據(jù)你自己的情況選擇這些選項(xiàng),最后一個(gè)CUDA版本,由于本實(shí)驗(yàn)不需要訓(xùn)練數(shù)據(jù),也不需要太大的計(jì)算量,所以直接選擇CPU版本即可。選擇完畢,下方會(huì)出現(xiàn)安裝指引,不得不說,Paddlepaddle這些方面做的還是比較貼心的。
要注意,如果你的Python3環(huán)境變量里的程序名稱是Python,記得將python3xxx語句改為Pythonxxx如下進(jìn)行安裝:
python-mpipinstallpaddlepaddle-i/pypi/simple
你還需要安裝paddlehub:
pipinstall-i/pypi/simplepaddlehub
2.編寫代碼
我們先試試單圖片識(shí)別,找到貓貓:
新建predict.py文件,存放貓照在當(dāng)前文件夾的imgs文件夾下,命名為c1.jpg.輸入以下代碼:
import
paddlehub
as
hub
#加載模型
yolov3=hub.Module(name="yolov3_darknet53_coco2017")
#圖片位置
test_img_path=
"imgs/c1.jpg"
#輸入圖片
input_dict={"image":[test_img_path]}
#輸出結(jié)果
results=yolov3.object_detection(data=input_dict)
for
result
in
results:
print(result['path'])
print(result['data'])
在終端/CMD輸入以下命令運(yùn)行文件:
pythonpredict.py
#[{'left':684.79376,'right':2025.4724,'top':961.53644,'bottom':2299.855,'label':'cat','confidence':0.94765514},{'left':1461.0829,'right':3853.3633,'top':621.53064,'bottom':2769.5376,'label':'cat','confidence':0.8093604}]
可以看到,識(shí)別到了兩只貓,其中第一只貓頂部位置為961,右部位置為2025,左部位置為684,底部位置為2299。根據(jù)這個(gè)位置,編寫代碼,用于框出相應(yīng)位置的貓:
def
paint_rect(input_img:str,output_path:str,
labels:list,position:list):
"""
畫出矩形
:paraminput_img:輸入圖片
:paramoutput_path:輸出圖片
:paramlabels:標(biāo)簽
:parampositions:坐標(biāo)
公眾號(hào):Python實(shí)用寶典
"""
img=cv2.imread(input_img)
for
position
in
positions:
print(position)
#畫矩形框,輸入?yún)?shù)分別為圖像、左上角坐標(biāo)、右下角坐標(biāo)、顏色數(shù)組、粗細(xì)
cv2.rectangle(
img,(position['left'],position['top']),
(position['right'],position['bottom']),
(0,
255,
0),thickness=10
)
if
'cat'
in
labels:
#若是貓,則存到另一個(gè)地方
shutil.move(input_img,output_path+os.sep+input_img.split('/')[-1])
cv2.imwrite(output_path+os.sep+
'rect_%s'
%input_img.split('/')[-1],img)
效果如下:
3.批量自動(dòng)識(shí)別
這樣,我們就有思路進(jìn)行自動(dòng)識(shí)別了,首先獲得該文件夾下所有的圖片,其次,將這些圖片都放入分類器中進(jìn)行分類,最后,再根據(jù)分類的標(biāo)簽將其提取出來移動(dòng)到其他地方。
獲得該文件夾下所有圖片:
def
get_all_path(dirpath,*suffix):
"""
獲得所有路徑
@paramdirpath:目錄
@param*suffix:后綴
公眾號(hào):Python實(shí)用寶典
"""
path_array=[]
for
r,ds,fs
in
os.walk(dirpath):
for
fn
in
fs:
if
os.path.splitext(fn)[1]
in
suffix:
fname=os.path.join(r,fn)
path_array.append(fname)
return
path_array
#獲得所有jpg和png圖片
image_paths=get_all_path(source_path,
'.jpg',
'.JPG',
'png',
'PNG')
放入分類器中分類:
#加載模型
yolov3=hub.Module(name="yolov3_darknet53_coco2017")
#輸入圖片
input_dict={"image":image_paths}
#輸出結(jié)果
results=yolov3.object_detection(data=input_dict,labels=['cat'])
根據(jù)標(biāo)簽畫框并移動(dòng):
def
paint_rect(input_img:str,output_path:str,
labels:list,position:list):
"""
畫出矩形
:paraminput_img:輸入圖片
:paramoutput_path:輸出圖片
:paramlabels:標(biāo)簽
:parampositions:坐標(biāo)
公眾號(hào):Python實(shí)用寶典
"""
img=cv2.imread(input_img)
for
position
in
positions:
#畫矩形框,輸入?yún)?shù)分別為圖像、左上角坐標(biāo)、右下角坐標(biāo)、顏色數(shù)組、粗細(xì)
cv2.rectangle(
img,(position['left'],position['top']),
(position['right'],position['bottom']),
(0,
255,
0),thickness=10
)
if
'cat'
in
labels:
#若是貓,則存到另一個(gè)地方
shutil.move(input_img,output_path+os.sep+input_img.split('/')[-1])
cv2.imwrite(output_path+os.sep+
'rect_%s'
%input_img.split('/')[-1],img)
results=yolov3.object_detection(data=input_dict,labels=['cat'])
for
result
in
results:
path=result['path']
labels=[]
positions=[]
for
target
in
result['data']:
labels.append(target.get('label',
''))
positions.append({
'left':target.get('left',
-1),
'top':target.get('
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中通快遞倉(cāng)庫(kù)培訓(xùn)體系
- 無租租車協(xié)議書
- 【課件】探討現(xiàn)代企業(yè)培訓(xùn)與員工持續(xù)發(fā)展的重要性
- 人自愿離婚協(xié)議書
- 《嬰幼兒早期教育》課件
- 專有技術(shù)合作協(xié)議與技術(shù)轉(zhuǎn)讓條款說明
- 農(nóng)村牧場(chǎng)畜群托管及護(hù)理協(xié)議
- 配送勞務(wù)分包合同協(xié)議
- 退休合同聘用合同協(xié)議
- 培訓(xùn)學(xué)校招生進(jìn)階實(shí)戰(zhàn)
- GB/T 14315-2008電力電纜導(dǎo)體用壓接型銅、鋁接線端子和連接管
- 《民法》全冊(cè)精講課件
- 小學(xué)語文五年級(jí)知識(shí)競(jìng)賽課件
- 護(hù)理人員業(yè)務(wù)技術(shù)檔案 模板
- 工藝管道儀表流程圖PID基礎(chǔ)知識(shí)入門級(jí)培訓(xùn)課件
- 人音版小學(xué)一年級(jí)音樂下冊(cè)教案 全冊(cè)
- 草皮鋪種施工方案
- 中醫(yī)養(yǎng)生穴位保健按摩課件
- 回旋鏢運(yùn)動(dòng)軌跡的模擬
- (完整)高血壓病歷以及全套臨床病歷
- 標(biāo)準(zhǔn)溶液配制與標(biāo)定原始記錄(氫氧化鈉)
評(píng)論
0/150
提交評(píng)論