This commit is contained in:
louiscklaw
2025-02-01 01:19:51 +08:00
commit 3b0b154910
32597 changed files with 1171319 additions and 0 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,544 @@
<?xml version="1.0"?>
<opencv_storage>
<cascade>
<stageType>BOOST</stageType>
<featureType>HAAR</featureType>
<height>20</height>
<width>20</width>
<stageParams>
<boostType>GAB</boostType>
<minHitRate>9.9500000476837158e-01</minHitRate>
<maxFalseAlarm>5.0000000000000000e-01</maxFalseAlarm>
<weightTrimRate>9.4999999999999996e-01</weightTrimRate>
<maxDepth>1</maxDepth>
<maxWeakCount>100</maxWeakCount></stageParams>
<featureParams>
<maxCatCount>0</maxCatCount>
<featSize>1</featSize>
<mode>ALL</mode></featureParams>
<stageNum>12</stageNum>
<stages>
<!-- stage 0 -->
<_>
<maxWeakCount>2</maxWeakCount>
<stageThreshold>-2.0792216528207064e-03</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 23 3.5195697098970413e-02</internalNodes>
<leafValues>
-9.7000002861022949e-01 9.5833331346511841e-01</leafValues></_>
<_>
<internalNodes>
0 -1 32 4.9420498311519623e-02</internalNodes>
<leafValues>
-9.3253821134567261e-01 9.6792078018188477e-01</leafValues></_></weakClassifiers></_>
<!-- stage 1 -->
<_>
<maxWeakCount>3</maxWeakCount>
<stageThreshold>-1.2283716201782227e+00</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 6 2.1136376261711121e-01</internalNodes>
<leafValues>
-8.8292682170867920e-01 7.6744186878204346e-01</leafValues></_>
<_>
<internalNodes>
0 -1 27 -3.6786209791898727e-02</internalNodes>
<leafValues>
6.4631646871566772e-01 -8.5865759849548340e-01</leafValues></_>
<_>
<internalNodes>
0 -1 2 8.2553006708621979e-02</internalNodes>
<leafValues>
-9.6414572000503540e-01 5.1321285963058472e-01</leafValues></_></weakClassifiers></_>
<!-- stage 2 -->
<_>
<maxWeakCount>2</maxWeakCount>
<stageThreshold>-5.2522403001785278e-01</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 34 -7.0488560013473034e-03</internalNodes>
<leafValues>
4.6428570151329041e-01 -9.0625000000000000e-01</leafValues></_>
<_>
<internalNodes>
0 -1 1 2.0252991467714310e-02</internalNodes>
<leafValues>
-9.2222303152084351e-01 3.8102594017982483e-01</leafValues></_></weakClassifiers></_>
<!-- stage 3 -->
<_>
<maxWeakCount>3</maxWeakCount>
<stageThreshold>-1.2258527278900146e+00</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 35 2.7621425688266754e-02</internalNodes>
<leafValues>
-9.3296086788177490e-01 2.7536231279373169e-01</leafValues></_>
<_>
<internalNodes>
0 -1 18 2.4644609540700912e-02</internalNodes>
<leafValues>
-7.8042775392532349e-01 5.6246817111968994e-01</leafValues></_>
<_>
<internalNodes>
0 -1 28 4.4026337563991547e-02</internalNodes>
<leafValues>
-7.2078734636306763e-01 5.9029269218444824e-01</leafValues></_></weakClassifiers></_>
<!-- stage 4 -->
<_>
<maxWeakCount>3</maxWeakCount>
<stageThreshold>-1.1094360351562500e+00</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 13 5.6299664080142975e-02</internalNodes>
<leafValues>
-8.5567009449005127e-01 3.3333334326744080e-01</leafValues></_>
<_>
<internalNodes>
0 -1 10 2.0412717014551163e-02</internalNodes>
<leafValues>
-6.9705963134765625e-01 6.2128168344497681e-01</leafValues></_>
<_>
<internalNodes>
0 -1 26 3.3632911741733551e-02</internalNodes>
<leafValues>
-7.4570971727371216e-01 6.2287092208862305e-01</leafValues></_></weakClassifiers></_>
<!-- stage 5 -->
<_>
<maxWeakCount>4</maxWeakCount>
<stageThreshold>-1.0068651437759399e+00</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 14 2.7963671088218689e-01</internalNodes>
<leafValues>
-8.6885243654251099e-01 1.6923077404499054e-01</leafValues></_>
<_>
<internalNodes>
0 -1 25 1.2323195114731789e-02</internalNodes>
<leafValues>
-7.9252362251281738e-01 3.5135197639465332e-01</leafValues></_>
<_>
<internalNodes>
0 -1 29 1.1619093269109726e-01</internalNodes>
<leafValues>
-8.5458588600158691e-01 4.3786722421646118e-01</leafValues></_>
<_>
<internalNodes>
0 -1 16 1.1368356645107269e-02</internalNodes>
<leafValues>
-8.9688044786453247e-01 3.6522126197814941e-01</leafValues></_></weakClassifiers></_>
<!-- stage 6 -->
<_>
<maxWeakCount>3</maxWeakCount>
<stageThreshold>-9.4377774000167847e-01</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 17 2.8343785554170609e-02</internalNodes>
<leafValues>
-7.5813955068588257e-01 4.5454546809196472e-01</leafValues></_>
<_>
<internalNodes>
0 -1 22 -6.7780455574393272e-03</internalNodes>
<leafValues>
6.8800747394561768e-01 -5.7961523532867432e-01</leafValues></_>
<_>
<internalNodes>
0 -1 9 -9.6869543194770813e-03</internalNodes>
<leafValues>
5.2493661642074585e-01 -8.1870794296264648e-01</leafValues></_></weakClassifiers></_>
<!-- stage 7 -->
<_>
<maxWeakCount>2</maxWeakCount>
<stageThreshold>-5.8824944496154785e-01</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 8 2.2776421904563904e-01</internalNodes>
<leafValues>
-7.8431373834609985e-01 2.7272728085517883e-01</leafValues></_>
<_>
<internalNodes>
0 -1 4 -1.3495892286300659e-01</internalNodes>
<leafValues>
3.2428205013275146e-01 -8.6097669601440430e-01</leafValues></_></weakClassifiers></_>
<!-- stage 8 -->
<_>
<maxWeakCount>3</maxWeakCount>
<stageThreshold>-9.8578220605850220e-01</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 31 3.1056167557835579e-02</internalNodes>
<leafValues>
-7.7464789152145386e-01 4.8571428656578064e-01</leafValues></_>
<_>
<internalNodes>
0 -1 15 2.3904092609882355e-02</internalNodes>
<leafValues>
-7.8261238336563110e-01 4.7452750802040100e-01</leafValues></_>
<_>
<internalNodes>
0 -1 24 5.9338808059692383e-02</internalNodes>
<leafValues>
-6.1228525638580322e-01 5.7147806882858276e-01</leafValues></_></weakClassifiers></_>
<!-- stage 9 -->
<_>
<maxWeakCount>3</maxWeakCount>
<stageThreshold>-1.2791478633880615e+00</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 11 -1.5193784609436989e-02</internalNodes>
<leafValues>
-6.0240965336561203e-02 -8.6666667461395264e-01</leafValues></_>
<_>
<internalNodes>
0 -1 3 1.2929022312164307e-01</internalNodes>
<leafValues>
-7.7955096960067749e-01 2.7296727895736694e-01</leafValues></_>
<_>
<internalNodes>
0 -1 30 2.4830256006680429e-04</internalNodes>
<leafValues>
-8.2253754138946533e-01 3.6706984043121338e-01</leafValues></_></weakClassifiers></_>
<!-- stage 10 -->
<_>
<maxWeakCount>5</maxWeakCount>
<stageThreshold>-9.7741711139678955e-01</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 36 -7.1106562390923500e-03</internalNodes>
<leafValues>
7.4074074625968933e-02 -7.8350514173507690e-01</leafValues></_>
<_>
<internalNodes>
0 -1 37 1.0002901777625084e-02</internalNodes>
<leafValues>
-9.6380352973937988e-01 1.2861841917037964e-01</leafValues></_>
<_>
<internalNodes>
0 -1 12 -1.1527233757078648e-02</internalNodes>
<leafValues>
3.1283980607986450e-01 -7.8981834650039673e-01</leafValues></_>
<_>
<internalNodes>
0 -1 0 7.7132084406912327e-03</internalNodes>
<leafValues>
-9.2314887046813965e-01 3.5634875297546387e-01</leafValues></_>
<_>
<internalNodes>
0 -1 33 -2.8069035615772009e-03</internalNodes>
<leafValues>
3.7375229597091675e-01 -7.4664002656936646e-01</leafValues></_></weakClassifiers></_>
<!-- stage 11 -->
<_>
<maxWeakCount>5</maxWeakCount>
<stageThreshold>-1.3949387073516846e+00</stageThreshold>
<weakClassifiers>
<_>
<internalNodes>
0 -1 19 4.9728322774171829e-03</internalNodes>
<leafValues>
-7.8894472122192383e-01 1.8367347121238708e-01</leafValues></_>
<_>
<internalNodes>
0 -1 21 8.1018730998039246e-03</internalNodes>
<leafValues>
-7.9892826080322266e-01 2.1818427741527557e-01</leafValues></_>
<_>
<internalNodes>
0 -1 5 9.7033903002738953e-03</internalNodes>
<leafValues>
-5.7855868339538574e-01 4.4443655014038086e-01</leafValues></_>
<_>
<internalNodes>
0 -1 20 -6.7393705248832703e-02</internalNodes>
<leafValues>
6.7329019308090210e-01 -4.4816955924034119e-01</leafValues></_>
<_>
<internalNodes>
0 -1 7 3.2395221292972565e-02</internalNodes>
<leafValues>
-8.7441539764404297e-01 4.0108311176300049e-01</leafValues></_></weakClassifiers></_></stages>
<features>
<_>
<rects>
<_>
0 0 10 1 -1.</_>
<_>
5 0 5 1 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
0 0 20 1 -1.</_>
<_>
5 0 10 1 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
0 0 12 6 -1.</_>
<_>
6 0 6 6 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
0 0 7 20 -1.</_>
<_>
0 5 7 10 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
0 0 20 9 -1.</_>
<_>
0 3 20 3 3.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
0 4 2 16 -1.</_>
<_>
1 4 1 16 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
0 4 20 12 -1.</_>
<_>
0 7 20 6 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
0 5 6 9 -1.</_>
<_>
0 8 6 3 3.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
0 6 20 12 -1.</_>
<_>
10 6 10 12 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
0 12 3 8 -1.</_>
<_>
0 16 3 4 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
0 14 8 6 -1.</_>
<_>
2 14 4 6 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
1 2 15 3 -1.</_>
<_>
1 3 15 1 3.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
1 2 16 3 -1.</_>
<_>
1 3 16 1 3.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
1 3 5 6 -1.</_>
<_>
1 6 5 3 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
1 3 18 16 -1.</_>
<_>
1 7 18 8 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
2 3 16 1 -1.</_>
<_>
6 3 8 1 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
2 5 6 2 -1.</_>
<_>
4 7 2 2 3.</_></rects>
<tilted>1</tilted></_>
<_>
<rects>
<_>
2 9 6 9 -1.</_>
<_>
4 9 2 9 3.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
3 0 1 12 -1.</_>
<_>
3 6 1 6 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
3 2 6 2 -1.</_>
<_>
3 2 3 1 2.</_>
<_>
6 3 3 1 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
4 16 15 3 -1.</_>
<_>
9 17 5 1 9.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
6 0 4 3 -1.</_>
<_>
8 0 2 3 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
6 16 6 3 -1.</_>
<_>
6 17 6 1 3.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
7 0 6 13 -1.</_>
<_>
9 0 2 13 3.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
7 2 6 15 -1.</_>
<_>
9 2 2 15 3.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
7 3 6 2 -1.</_>
<_>
9 3 2 2 3.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
7 7 6 6 -1.</_>
<_>
9 9 2 2 9.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
8 0 4 6 -1.</_>
<_>
6 2 4 2 3.</_></rects>
<tilted>1</tilted></_>
<_>
<rects>
<_>
9 1 6 14 -1.</_>
<_>
9 1 3 7 2.</_>
<_>
12 8 3 7 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
10 3 9 15 -1.</_>
<_>
10 8 9 5 3.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
12 6 4 2 -1.</_>
<_>
12 6 2 1 2.</_>
<_>
14 7 2 1 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
12 10 8 6 -1.</_>
<_>
14 10 4 6 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
14 1 6 8 -1.</_>
<_>
12 3 6 4 2.</_></rects>
<tilted>1</tilted></_>
<_>
<rects>
<_>
14 2 4 1 -1.</_>
<_>
15 3 2 1 2.</_></rects>
<tilted>1</tilted></_>
<_>
<rects>
<_>
14 2 6 3 -1.</_>
<_>
14 3 6 1 3.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
16 3 2 8 -1.</_>
<_>
16 7 2 4 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
16 18 4 2 -1.</_>
<_>
18 18 2 2 2.</_></rects>
<tilted>0</tilted></_>
<_>
<rects>
<_>
18 0 1 20 -1.</_>
<_>
18 5 1 10 2.</_></rects>
<tilted>0</tilted></_></features></cascade>
</opencv_storage>

View File

@@ -0,0 +1,127 @@
import cv2
import os,sys
count_good_result = 0
count_good_result_base = 0
count_bad_result = 0
count_bad_result_base = 0
total_test_run = 0
bad_result_African = 0
bad_result_Beach = 0
bad_result_Building = 0
bad_result_Bus = 0
bad_result_Dinosaur = 0
bad_result_Dish = 0
bad_result_Elephant = 0
bad_result_Flower = 0
bad_result_Horse = 0
bad_result_Mountain = 0
# 获取 XML 文件,加载人脸检测器
faceCascade = cv2.CascadeClassifier("cascade.xml")
# remove all jpg files in iut_re folder
for f in os.listdir("iut_re"):
if f.endswith(".jpg"):
os.remove(os.path.join("iut_re", f))
image_set = []
for f in os.listdir("iut"):
if f.endswith(".jpg"):
file_name = os.path.join("iut", f)
image_set.append([cv2.imread(file_name), file_name])
import random
for i in range(len(image_set)):
if i % 2 == 0:
do_test = True
else:
do_test = False
if (do_test):
image = image_set[i][0]
file_name = image_set[i][1]
print(file_name)
re_file_name = file_name.replace(".jpg","_re.jpg").replace('iut/', 'iut_re/')
# 色彩转换,转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 调用函数 detectMultiScale
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.15, minNeighbors=5, minSize=(5, 5))
# print(faces)
# 打印输出的测试结果
# print("found {0} face in {1}".format(len(faces), os.path.basename(file_name)))
# print((re_file_name, len(faces)))
total_test_run += 1
result = os.path.basename(file_name).replace('.jpg','')
if (int(result) > 100 and int(result) < 200):
count_good_result_base += 1
if (len(faces) > 0):
count_good_result += 1
else:
count_bad_result_base +=1
if (len(faces) > 0):
count_bad_result += 1
if (int(result) >= 0 and int(result) < 100):
bad_result_African += 1
elif (int(result) >= 100 and int(result) < 200):
bad_result_Beach += 1
elif (int(result) >= 200 and int(result) < 300):
bad_result_Building += 1
elif (int(result) >= 300 and int(result) < 400):
bad_result_Bus += 1
elif (int(result) >= 400 and int(result) < 500):
bad_result_Dinosaur += 1
elif (int(result) >= 500 and int(result) < 600):
bad_result_Elephant += 1
elif (int(result) >= 600 and int(result) < 700):
bad_result_Flower += 1
elif (int(result) >= 700 and int(result) < 800):
bad_result_Horse += 1
elif (int(result) >= 800 and int(result) < 900):
bad_result_Mountain += 1
elif (int(result) >= 900 and int(result) < 1000):
bad_result_Dish += 1
# 逐个标注人脸
for x, y, w, h in faces:
cv2.rectangle(image, (x, y), (x + w, y + w), (0, 255, 0), 2) # 矩形标注
# cv2.circle(image,(int((x+x+w)/2),int((y+y+h)/2)),int(w/2),(0,255,0),2)
if (len(faces) > 0):
# 显示结果
# cv2.imshow("dect", image)
# 保存检测结果
cv2.imwrite(re_file_name, image)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
print("count_good_result : "+ str(count_good_result))
print('count_good_result_base : '+ str(count_good_result_base))
print('count_bad_result : '+ str(count_bad_result))
print('count_bad_result_base : '+ str(count_bad_result_base))
print('bad result drill down')
print('')
print('bad_result_African : '+ str(bad_result_African))
print('bad_result_Beach : '+ str(bad_result_Beach))
print('bad_result_Building : '+ str(bad_result_Building))
print('bad_result_Bus : '+ str(bad_result_Bus))
print('bad_result_Dinosaur : '+ str(bad_result_Dinosaur))
print('bad_result_Dish : '+ str(bad_result_Dish))
print('bad_result_Elephant : '+ str(bad_result_Elephant))
print('bad_result_Flower : '+ str(bad_result_Flower))
print('bad_result_Horse : '+ str(bad_result_Horse))
print('bad_result_Mountain : '+ str(bad_result_Mountain))
print('total test run (good base + bad base) : '+ str(total_test_run))

View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -ex
python ./sanity_test.py

Binary file not shown.

View File

@@ -0,0 +1,120 @@
import cv2
import os,sys
count_good_result = 0
count_good_result_base = 0
count_bad_result = 0
count_bad_result_base = 0
total_test_run = 0
bad_result_African = 0
bad_result_Beach = 0
bad_result_Building = 0
bad_result_Bus = 0
bad_result_Dinosaur = 0
bad_result_Dish = 0
bad_result_Elephant = 0
bad_result_Flower = 0
bad_result_Horse = 0
bad_result_Mountain = 0
# 获取 XML 文件,加载人脸检测器
faceCascade = cv2.CascadeClassifier("cascade.xml")
# remove all jpg files in iut_re folder
for f in os.listdir("iut_re"):
if f.endswith(".jpg"):
os.remove(os.path.join("iut_re", f))
image_set = []
for f in os.listdir("iut"):
if f.endswith(".jpg"):
file_name = os.path.join("iut", f)
image_set.append([cv2.imread(file_name), file_name])
for i in range(len(image_set)):
image = image_set[i][0]
file_name = image_set[i][1]
print(file_name)
re_file_name = file_name.replace(".jpg","_re.jpg").replace('iut/', 'iut_re/')
# 色彩转换,转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 调用函数 detectMultiScale
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.15, minNeighbors=5, minSize=(5, 5))
# print(faces)
# 打印输出的测试结果
# print("found {0} face in {1}".format(len(faces), os.path.basename(file_name)))
# print((re_file_name, len(faces)))
total_test_run += 1
result = os.path.basename(file_name).replace('.jpg','')
if (int(result) > 100 and int(result) < 200):
count_good_result_base += 1
if (len(faces) > 0):
count_good_result += 1
else:
count_bad_result_base +=1
if (int(result) >= 0 and int(result) < 100):
bad_result_African += 1
elif (int(result) >= 100 and int(result) < 200):
bad_result_Beach += 1
elif (int(result) >= 200 and int(result) < 300):
bad_result_Building += 1
elif (int(result) >= 300 and int(result) < 400):
bad_result_Bus += 1
elif (int(result) >= 400 and int(result) < 500):
bad_result_Dinosaur += 1
elif (int(result) >= 500 and int(result) < 600):
bad_result_Elephant += 1
elif (int(result) >= 600 and int(result) < 700):
bad_result_Flower += 1
elif (int(result) >= 700 and int(result) < 800):
bad_result_Horse += 1
elif (int(result) >= 800 and int(result) < 900):
bad_result_Mountain += 1
elif (int(result) >= 900 and int(result) < 1000):
bad_result_Dish += 1
if (len(faces) > 0):
count_bad_result += 1
# 逐个标注人脸
for x, y, w, h in faces:
cv2.rectangle(image, (x, y), (x + w, y + w), (0, 255, 0), 2) # 矩形标注
# cv2.circle(image,(int((x+x+w)/2),int((y+y+h)/2)),int(w/2),(0,255,0),2)
if (len(faces) > 0):
# 显示结果
# cv2.imshow("dect", image)
# 保存检测结果
cv2.imwrite(re_file_name, image)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
print("count_good_result : "+ str(count_good_result))
print('count_good_result_base : '+ str(count_good_result_base))
print('count_bad_result : '+ str(count_bad_result))
print('count_bad_result_base : '+ str(count_bad_result_base))
print('bad result drill down')
print('')
print('bad_result_African : '+ str(bad_result_African))
print('bad_result_Beach : '+ str(bad_result_Beach))
print('bad_result_Building : '+ str(bad_result_Building))
print('bad_result_Bus : '+ str(bad_result_Bus))
print('bad_result_Dinosaur : '+ str(bad_result_Dinosaur))
print('bad_result_Dish : '+ str(bad_result_Dish))
print('bad_result_Elephant : '+ str(bad_result_Elephant))
print('bad_result_Flower : '+ str(bad_result_Flower))
print('bad_result_Horse : '+ str(bad_result_Horse))
print('bad_result_Mountain : '+ str(bad_result_Mountain))
print('total test run : '+ str(total_test_run))

View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -ex
python ./test.py

View File

@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -ex
npx nodemon --ext xml --exec "python ./test.py"