当前位置:网站首页>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()
边栏推荐
- 2018 Jiangsu Vocational College skills competition vocational group "information security management and evaluation" competition assignment
- Sword finger offer high quality code
- leetcode 509. Fibonacci number
- Exception of DB2 getting table information: caused by: com ibm. db2.jcc. am. SqlException: [jcc][t4][1065][12306][4.25.13]
- LVS+Keepalived(DR模式)学习笔记
- Bus message bus
- Comment les entreprises gèrent - elles les données? Partager les leçons tirées des quatre aspects de la gouvernance des données
- CompletableFuture使用详解
- 联合索引ABC的几种索引利用情况
- 服装门店如何盈利?
猜你喜欢
![Stack and queue-p78-8 [2011 unified examination true question]](/img/df/72ba22f1953551943494d661a56a3b.jpg)
Stack and queue-p78-8 [2011 unified examination true question]

2018年江苏省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书第一阶段答案

How can clothing stores make profits?

Answer to the second stage of the assignment of "information security management and evaluation" of the higher vocational group of the 2018 Jiangsu Vocational College skills competition

How can brand e-commerce grow against the trend? See the future here!

Maze games based on JS

Config分布式配置中心

品牌电商如何逆势增长?在这里预见未来!

Stack and queue-p79-9

基于JS的迷宫小游戏
随机推荐
Please tell me how to monitor multiple schemas and tables by listening to PgSQL
leetcode 509. Fibonacci number
MOS管参数μCox得到的一种方法
[Luogu p1971] rabbit and egg game (bipartite game)
品牌·咨询标准化
.net core 访问不常见的静态文件类型(MIME 类型)
LC 面试题 02.07. 链表相交 & LC142. 环形链表II
大促过后,销量与流量兼具,是否真的高枕无忧?
AddressSanitizer 技术初体验
from . onnxruntime_ pybind11_ State Import * noqa ddddocr operation error
2022年全国所有A级景区数据(13604条)
leetcode 509. Fibonacci Number(斐波那契数字)
Under what circumstances should we consider sub database and sub table
How to model and simulate the target robot [mathematical / control significance]
MySQL的主从复制原理
Networkx绘图和常用库函数坐标绘图
Four goals for the construction of intelligent safety risk management and control platform for hazardous chemical enterprises in Chemical Industry Park
Big coffee gathering | nextarch foundation cloud development meetup is coming
Basic introduction of JWT
jdbc数据库连接池使用问题