当前位置:网站首页>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()
边栏推荐
- How does an enterprise manage data? Share the experience summary of four aspects of data governance
- 剑指offer-高质量的代码
- LC interview question 02.07 Linked list intersection & lc142 Circular linked list II
- ANR 原理及实践
- 工具类:对象转map 驼峰转下划线 下划线转驼峰
- Four goals for the construction of intelligent safety risk management and control platform for hazardous chemical enterprises in Chemical Industry Park
- LVS+Keepalived(DR模式)学习笔记
- 场馆怎么做体育培训?
- 化工园区危化品企业安全风险智能化管控平台建设四大目标
- Composition API 前提
猜你喜欢
随机推荐
[explanation of JDBC and internal classes]
企業如何進行數據治理?分享數據治理4個方面的經驗總結
Jetpack Compose 远不止是一个UI框架这么简单~
Stack and queue-p79-9
SolidWorks GB Library (steel profile library, including aluminum profile, aluminum tube and other structures) installation and use tutorial (generating aluminum profile as an example)
2022年全国所有A级景区数据(13604条)
Comment les entreprises gèrent - elles les données? Partager les leçons tirées des quatre aspects de la gouvernance des données
带你刷(牛客网)C语言百题(第一天)
main函数在import语句中的特殊行为
readonly 只读
一条慢SQL拖死整个系统
Mysql---- import and export & View & Index & execution plan
MATLAB小技巧(29)多项式拟合 plotfit
oracle如何备份索引
leetcode 509. Fibonacci number
Special behavior of main function in import statement
Stack Title: nesting depth of valid parentheses
Bus消息总线
如何给目标机器人建模并仿真【数学/控制意义】
【JDBC以及内部类的讲解】









