当前位置:网站首页>Common function detect_ image/predict
Common function detect_ image/predict
2022-07-07 07:07:00 【Inverse summer 11111】
detect_image
#---------------------------------------------------#
# Test pictures
#---------------------------------------------------#
def detect_image(self, image):
start = timer()
image_shape = np.array(np.shape(image)[0:2])
crop_img, x_offset, y_offset = letterbox_image(image, (self.model_image_size[0], self.model_image_size[1]))
photo = np.array(crop_img, dtype=np.float64)
# Image preprocessing , normalization
photo = preprocess_input(np.reshape(photo, [1, self.model_image_size[0], self.model_image_size[1], 3]))
preds = self.ssd_model.predict(photo)
# Decode the prediction results
results = self.bbox_util.detection_out(preds, confidence_threshold=self.confidence)
# print(results)
if len(results[0]) <= 0:
return image, []
# Screen out those whose scores are higher than confidence Box of
det_label = results[0][:, 0]
det_conf = results[0][:, 1]
det_xmin, det_ymin, det_xmax, det_ymax = results[0][:, 2], results[0][:, 3], results[0][:, 4], results[0][:, 5]
top_indices = [i for i, conf in enumerate(det_conf) if conf >= self.confidence]
top_conf = det_conf[top_indices]
top_label_indices = det_label[top_indices].tolist()
top_xmin, top_ymin, top_xmax, top_ymax = np.expand_dims(det_xmin[top_indices], -1), np.expand_dims(
det_ymin[top_indices], -1), np.expand_dims(det_xmax[top_indices], -1), np.expand_dims(det_ymax[top_indices],
-1)
# Remove the gray strip
boxes = retinanet_correct_boxes(top_ymin, top_xmin, top_ymax, top_xmax,
np.array([self.model_image_size[0], self.model_image_size[1]]), image_shape)
font = ImageFont.truetype(font='model_data/simhei.ttf',
size=np.floor(3e-2 * np.shape(image)[1] + 0.5).astype('int32'))
thickness = (np.shape(image)[0] + np.shape(image)[1]) // self.model_image_size[0]
record_pred = []
for i, c in enumerate(top_label_indices):
predicted_class = self.class_names[int(c) - 1]
score = top_conf[i]
top, left, bottom, right = boxes[i]
top = top - 5
left = left - 5
bottom = bottom + 5
right = right + 5
top = max(0, np.floor(top + 0.5).astype('int32'))
left = max(0, np.floor(left + 0.5).astype('int32'))
bottom = min(np.shape(image)[0], np.floor(bottom + 0.5).astype('int32'))
right = min(np.shape(image)[1], np.floor(right + 0.5).astype('int32'))
print(top, left, bottom, right)
# Picture frame
label = '{} {:.2f}'.format(predicted_class, score)
draw = ImageDraw.Draw(image)
label_size = draw.textsize(label, font)
# label = label.encode('utf-8') # If this place is going to become utf8
print(label, (left, top), (right, bottom))
record_pred.append(label + " %s %s %s %s" % (left, top, right, bottom))
if top - label_size[1] >= 0:
text_origin = np.array([left, top - label_size[1]])
else:
text_origin = np.array([left, top + 1])
for i in range(thickness):
draw.rectangle(
[left + i, top + i, right - i, bottom - i],
outline=self.colors[int(c) - 1])
draw.rectangle(
[tuple(text_origin), tuple(text_origin + label_size)],
fill=self.colors[int(c) - 1])
draw.text(text_origin, label, fill=(0, 0, 0), font=font) # If the previous label Switch to utf-8 Here should be changed back :str(label,'UTF-8')
del draw
end = timer()
print("detect time:", end - start)
return image, record_pred
Different models need to be changed only : boxes = ssd_correct_boxes(top_ymin,top_xmin,top_ymax,top_xmax,np.array([self.model_image_size[0],self.model_image_size[1]]),image_shape)
Remove the part of the gray strip ,ssd The model is ssd_correct,retinanet The model is retinanet_correct... By analogy
predict
from keras.layers import Input
from retinanet import Retinanet
from PIL import Image
import os
retinanet = Retinanet()
img_path = "data/train1/domain1" # TODO: Enter the image folder to test
predict_path = "mAP/predict/"
filename_list = os.listdir(img_path)
for filename in filename_list:
print(filename)
img = input(filename)
try:
image = Image.open(img)
except:
print('Open Error! Try again!')
else:
r_image,record_pred = retinanet.detect_image(image)
with open(predict_path + filename.split(".")[0] + '.txt', "w") as f:
f.write("\n".join(record_pred))
# r_image.save("mAP/predict_images/"+filename)
retinanet.close_session()
边栏推荐
- 品牌·咨询标准化
- Networkx drawing and common library function coordinate drawing
- 组件的通信
- 【NOI模拟赛】区域划分(结论,构造)
- Bus message bus
- This article introduces you to the characteristics, purposes and basic function examples of static routing
- from .onnxruntime_pybind11_state import * # noqa ddddocr运行报错
- MYSQL binlog相关命令
- 关于数据库数据转移的问题,求各位解答下
- What books can greatly improve programming ideas and abilities?
猜你喜欢
健身房如何提高竞争力?
LC interview question 02.07 Linked list intersection & lc142 Circular linked list II
Stack and queue-p78-8 [2011 unified examination true question]
[GNN] graphic gnn:a gender Introduction (including video)
Special behavior of main function in import statement
企業如何進行數據治理?分享數據治理4個方面的經驗總結
Master-slave replication principle of MySQL
SVN version management in use replacement release and connection reset
MOS管参数μCox得到的一种方法
mysql查看bin log 并恢复数据
随机推荐
AddressSanitizer 技术初体验
【JDBC以及内部类的讲解】
How does an enterprise manage data? Share the experience summary of four aspects of data governance
Network foundation - header, encapsulation and unpacking
ESXI挂载移动(机械)硬盘详细教程
leetcode 509. Fibonacci number
LC 面试题 02.07. 链表相交 & LC142. 环形链表II
Special behavior of main function in import statement
How to install swoole under window
Basic introduction of JWT
【mysqld】Can't create/write to file
Algorithm --- bit count (kotlin)
How Oracle backs up indexes
【mysqld】Can't create/write to file
MySQL binlog related commands
AVL树的实现
Installing redis and windows extension method under win system
大咖云集|NextArch基金会云开发Meetup来啦
MySQL的主从复制原理
Take you to brush (niuke.com) C language hundred questions (the first day)