Initial commit
This commit is contained in:
87
Tensorflow/concours_foetus/inference.py
Normal file
87
Tensorflow/concours_foetus/inference.py
Normal file
@@ -0,0 +1,87 @@
|
||||
import tensorflow as tf
|
||||
import sys
|
||||
import time
|
||||
import cv2
|
||||
import numpy as np
|
||||
import math
|
||||
import common
|
||||
import config
|
||||
import model
|
||||
import csv
|
||||
|
||||
model=model.model(config.input_model)
|
||||
|
||||
rouge=(0, 0, 255)
|
||||
vert=(0, 255, 0)
|
||||
|
||||
if True:
|
||||
dir=config.dir_images
|
||||
fichier="training_set.csv"
|
||||
test=False
|
||||
else:
|
||||
dir=config.dir_images_test
|
||||
fichier="test_set.csv"
|
||||
test=True
|
||||
|
||||
checkpoint=tf.train.Checkpoint(model=model)
|
||||
checkpoint.restore(tf.train.latest_checkpoint("./training/"))
|
||||
|
||||
with open(fichier, newline='') as csvfile:
|
||||
lignes=csv.reader(csvfile, delimiter=',')
|
||||
for ligne in lignes:
|
||||
print("LIGNE:", ligne)
|
||||
print("XXX", dir+ligne[0])
|
||||
img_originale=cv2.imread(dir+ligne[0])
|
||||
if img_originale is None:
|
||||
continue
|
||||
print("WWW", ligne[0], dir+ligne[0], img_originale.shape)
|
||||
H, W, C=img_originale.shape
|
||||
mm_pixel=float(ligne[1])
|
||||
img=cv2.resize(img_originale, (config.largeur, config.hauteur))
|
||||
img2=img.copy()
|
||||
img=np.array(img, dtype=np.float32)/255
|
||||
img=np.expand_dims(img[:, :, 0], axis=-1)
|
||||
predictions=model(np.array([img]))
|
||||
x, y, grand_axe, petit_axe, angle=predictions[0]
|
||||
cv2.ellipse(img2, (x*config.norm, y*config.norm), (petit_axe*config.norm/2, grand_axe*config.norm/2), angle*180, 0., 360., rouge, 2)
|
||||
print("Prediction", np.array(predictions[0]))
|
||||
|
||||
if test is False:
|
||||
f_ellipse=ligne[0].split('.')[0]+"_Annotation.png"
|
||||
image_ellipse=cv2.imread(dir+f_ellipse)
|
||||
if image_ellipse is None:
|
||||
print("Fichier absent", dir+f_ellipse)
|
||||
continue
|
||||
img_ellipse_f_=image_ellipse[:, :, 0]
|
||||
contours, hierarchy=cv2.findContours(img_ellipse_f_, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
||||
(x_, y_), (ma_, MA_), a_=cv2.fitEllipse(contours[0])
|
||||
cv2.ellipse(img_originale, (int(x_), int(y_)), (int(ma_/2), int(MA_/2)), a_, 0., 360., vert, 3)
|
||||
|
||||
cv2.ellipse(img_originale, (x*W, y*W), (petit_axe*W/2, grand_axe*W/2), angle*180, 0., 360., rouge, 2)
|
||||
|
||||
x=float(x*W*mm_pixel)
|
||||
y=float(y*W*mm_pixel)
|
||||
axis_x=float(grand_axe*W*mm_pixel/2)
|
||||
axis_y=float(petit_axe*W*mm_pixel/2)
|
||||
|
||||
r=180.
|
||||
r_2=r/2
|
||||
if angle>=0.5:
|
||||
angle=angle*r-r_2
|
||||
else:
|
||||
angle=angle*r+r_2
|
||||
|
||||
HC=np.pi*np.sqrt(2*(axis_x**2+axis_y**2))
|
||||
|
||||
cv2.putText(img_originale, "HC: {:5.2f}mm".format(HC), (20, 30), cv2.FONT_HERSHEY_DUPLEX, 1, (0, 0, 255), 2)
|
||||
print("{},{:f},{:f},{:f},{:f},{:f} HC: {:f}mm".format(ligne[0], x, y, axis_x, axis_y, angle, HC))
|
||||
if len(ligne)==3:
|
||||
cv2.putText(img_originale, "HC: {:5.2f}mm".format(float(ligne[2])), (20, 60), cv2.FONT_HERSHEY_DUPLEX, 1, (0, 255, 0), 2)
|
||||
print("HC: {}mm prediction: {:f}mm".format(ligne[2], HC))
|
||||
|
||||
cv2.imshow("Image originale", img_originale)
|
||||
cv2.imshow("Inference", img2)
|
||||
|
||||
key=cv2.waitKey()&0xFF
|
||||
if key==ord('q'):
|
||||
quit()
|
||||
Reference in New Issue
Block a user