




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第基于Python實(shí)現(xiàn)一鍵找出磁盤里所有貓照目錄前言1.準(zhǔn)備2.編寫代碼3.批量自動(dòng)識別4.完整代碼
前言
最近在整理我磁盤上的照片,發(fā)現(xiàn)不少貓照,突然覺得若能把這些貓照都挑出來,觀察它們的成長軌跡也是一件不錯(cuò)的事情。一張一張的找實(shí)在是太費(fèi)勁了,能不能自動(dòng)化地找出來呢?
目標(biāo)檢測,是許多計(jì)算機(jī)視覺應(yīng)用的重中之重,比如說我們上次的實(shí)例分割:Python20行代碼批量自動(dòng)摳圖,人體關(guān)鍵點(diǎn)提取、人臉識別等。而我們這一次,是要識別貓照。由于時(shí)間不多,我們沒有時(shí)間收集訓(xùn)練集,那么有沒有已經(jīng)訓(xùn)練好的目標(biāo)檢測模型呢?
這時(shí)候就要搬出paddlehub了,puddlehub有一個(gè)模型叫做YOLOv3,基于JosephRedmon和AliFarhadi提出的單階段檢測器。該檢測器與達(dá)到同樣精度的傳統(tǒng)目標(biāo)檢測方法相比,推斷速度能達(dá)到接近兩倍。
YOLOv3將輸入圖像分成S*S個(gè)格子,每個(gè)格子預(yù)測B個(gè)boundingbox,每個(gè)boundingbox預(yù)測內(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)識別貓的功能,我們需要安裝paddlepaddle,進(jìn)入他們的官方網(wǎng)站就有詳細(xì)的指引
根據(jù)你自己的情況選擇這些選項(xiàng),最后一個(gè)CUDA版本,由于本實(shí)驗(yàn)不需要訓(xùn)練數(shù)據(jù),也不需要太大的計(jì)算量,所以直接選擇CPU版本即可。選擇完畢,下方會出現(xiàn)安裝指引,不得不說,Paddlepaddle這些方面做的還是比較貼心的。
要注意,如果你的Python3環(huán)境變量里的程序名稱是Python,記得將python3xxx語句改為Pythonxxx如下進(jìn)行安裝:
python-mpipinstallpaddlepaddle-i/pypi/simple
你還需要安裝paddlehub:
pipinstall-i/pypi/simplepaddlehub
2.編寫代碼
我們先試試單圖片識別,找到貓貓:
新建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}]
可以看到,識別到了兩只貓,其中第一只貓頂部位置為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)
公眾號: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)識別
這樣,我們就有思路進(jìn)行自動(dòng)識別了,首先獲得該文件夾下所有的圖片,其次,將這些圖片都放入分類器中進(jìn)行分類,最后,再根據(jù)分類的標(biāo)簽將其提取出來移動(dòng)到其他地方。
獲得該文件夾下所有圖片:
def
get_all_path(dirpath,*suffix):
"""
獲得所有路徑
@paramdirpath:目錄
@param*suffix:后綴
公眾號: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)
公眾號: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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年房屋建筑工程考試卷及答案指南
- 2025年大學(xué)生創(chuàng)新創(chuàng)業(yè)大賽題及答案
- 2025年電氣工程師職稱評定考試試卷及答案
- 江蘇省南通市如皋市丁堰鎮(zhèn)初級中學(xué)2025年八下英語期末統(tǒng)考試題含答案
- 2025年湖南省長沙市長雅實(shí)、西雅、雅洋八下英語期末教學(xué)質(zhì)量檢測試題含答案
- 前臺收銀結(jié)賬操作規(guī)范
- 最美勞動(dòng)者主題活動(dòng)方案
- 2025年深圳駕校考試教練員從業(yè)資格證
- 車隊(duì)交通安全知識培訓(xùn)
- 社會公益活動(dòng)志愿者證明(5篇)
- 2024年陜西省政工師理論知識考試參考題庫(含答案)
- 市政道路工程技術(shù)標(biāo)
- 留學(xué)宣講活動(dòng)策劃方案
- 林下種植中藥材的可行性方案
- GB/T 43543-2023漱口水
- 鋼廠燒結(jié)機(jī)安裝施工組織設(shè)計(jì)
- 國家開放大學(xué)電大專科《憲法學(xué)》2025期末試題及答案
- 電信營業(yè)廳規(guī)章制度范文(2篇)
- 火龍罐療法經(jīng)典課件
- 德國司法鑒定培訓(xùn)心得
- xxxx智能化工程施工進(jìn)度計(jì)劃表
評論
0/150
提交評論