輸入測試
用選擇性搜尋(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...