Python實現乙個簡單的目標檢測

2021-10-19 07:35:26 字數 2919 閱讀 4814

輸入測試

用選擇性搜尋(select search)方法,對輸入選出n個候選區域

用訓練好的cnn模型**每個候選區域,保留乙個得分最高的候選區域

輸出**結果

import sys

import cv2

import numpy as np

import tensorflow as tf

from tensorflow.keras import datasets, layers, models

# 讀取

)# 按比例縮放

newheight =

200newwidth =

int( img.shape[1]

*200

/ img.shape[0]

)img = cv2.resize( img,

(newwidth, newheight)

)# 建立選擇性搜尋分割物件

ss = cv2.ximgproc.segmentation.createselectivesearchsegmentation(

)# 設定輸入影象,我們將執行分割

ss.setbaseimage( img )

# 快速但低召回選擇性搜尋方法

ss.switchtoselectivesearchfast(

)# 高召回但慢選擇性搜尋方法

# ss.switchtoselectivesearchquality()

# 執行選擇性搜尋分割輸入影象

rects = ss.process(

)# print(rects)

print

('total number of region proposals: {}'

.format

(len

( rects )))

class_names =

['airplane'

,'automobile'

,'bird'

,'cat'

,'deer'

,'dog'

,'frog'

,'horse'

,'ship'

,'truck'

]# 載入建立完全相同的模型,包括其權重和優化程式

loaded_model = tf.keras.models.load_model(

'lenet_classify_model.h5'

)while

true

:# 建立原始影象的副本

new_img = img.copy(

)# print(new_img)

region_score =

max_rect =

0 max_name =

"" max_score =

0# 重複所有的區域建議

for i, rect in

enumerate

( rects )

: x, y, w, h = rect # **框的左上角座標(x,y)以及框的寬w,高h

pre_img = new_img[y:y+h,x:x+w]

pre_img = cv2.resize(pre_img,(32

,32))

pre_img =

(np.expand_dims(pre_img,0)

)# 輸入的維度為(1,32,32,3)

pred_arr = loaded_model.predict(pre_img)

# **標籤

pre_label = np.argmax(pred_arr[0]

)# **得分

score = np.

max(pred_arr[0]

)# **類名

class_name = class_names[pre_label]

if score > max_score:

max_rect = rect

max_name = class_name

max_score = score

print

([max_rect,max_name,max_score]

) x,y,w,h = max_rect

# cv2.rectangle(new_img, (x, y), (x + w, y + h), (0, 255, 0), 1, cv2.line_aa )

cv2.rectangle(new_img,

(x, y)

,(x + w, y + h),(

0,255,0)

,2, cv2.line_aa)

font = cv2.font_hershey_******x

text = max_name+

" "+

str(max_score*

100)[0

:4]+

"%" cv2.puttext(new_img, text,

(x, y-5)

, font,

0.5,(0

,0,255),

2)# 顯示輸出

cv2.imshow(

"output"

, new_img)

# 等待按鍵輸入

k = cv2.waitkey(0)

&0xff

# q鍵

if k ==

113:

break

# 關閉所有視窗

cv2.destroyallwindows(

)

Python實現的乙個簡單LRU cache

起因 我的同事需要乙個固定大小的cache,如果記錄在cache中,直接從cache中讀取,否則從資料庫中讀取。python的dict 是乙個非常簡單的cache,但是由於資料量很大,記憶體很可能增長的過大,因此需要限定記錄數,並用lru演算法丟棄舊記錄。key 是整型,value是10kb左右的p...

Python 實現乙個簡單的多執行緒

import threading def main str print str def create thread num,args threads for i in range num try t threading.thread target main,args args t.start exc...

Python 基於Redis實現乙個簡單的分布式鎖

redis lock.py import redis import time import threading 連線池方式 pool redis.connectionpool host 127.0.0.1 port 6379 redis con redis.redis connection pool...