Milestone threaded pipeline with OCR and quality filter
1
.gitignore
vendored
@@ -1,5 +1,6 @@
|
||||
.venv_cuda/
|
||||
__pycache__/
|
||||
debug_ocr/
|
||||
*.py[cod]
|
||||
.pytest_cache/
|
||||
.mypy_cache/
|
||||
|
||||
|
Before Width: | Height: | Size: 49 KiB |
@@ -1,4 +0,0 @@
|
||||
0 0.498437 0.479861 0.117188 0.168056
|
||||
0 0.000000 -0.138889 0.000000 0.000000
|
||||
0 0.000000 -0.138889 0.000000 0.000000
|
||||
0 0.000000 -0.138889 0.000000 0.000000
|
||||
|
Before Width: | Height: | Size: 69 KiB |
@@ -1 +0,0 @@
|
||||
0 0.602734 0.609028 0.110156 0.181944
|
||||
|
Before Width: | Height: | Size: 65 KiB |
@@ -1,2 +0,0 @@
|
||||
0 0.498828 0.459722 0.152344 0.191667
|
||||
0 0.530859 0.457639 0.214844 0.315278
|
||||
|
Before Width: | Height: | Size: 158 KiB |
@@ -1,9 +0,0 @@
|
||||
0 0.377734 0.401389 0.132031 0.155556
|
||||
0 0.529297 0.211111 0.144531 0.205556
|
||||
0 0.641406 0.393750 0.126563 0.143056
|
||||
0 0.744531 0.609028 0.148438 0.193056
|
||||
0 0.275000 0.642361 0.167187 0.206944
|
||||
0 0.526953 0.622917 0.160156 0.184722
|
||||
0 0.635156 0.807639 0.126563 0.134722
|
||||
0 0.375781 0.857639 0.126563 0.145833
|
||||
0 0.531641 0.949306 0.172656 0.101389
|
||||
|
Before Width: | Height: | Size: 8.3 KiB |
@@ -1 +0,0 @@
|
||||
0 0.462109 0.513889 0.186719 0.163889
|
||||
|
Before Width: | Height: | Size: 787 KiB |
@@ -1,15 +0,0 @@
|
||||
0 0.140234 0.091667 0.244531 0.127778
|
||||
0 0.458594 0.102083 0.295312 0.115278
|
||||
0 0.792578 0.118750 0.272656 0.193056
|
||||
0 0.186328 0.302083 0.307031 0.154167
|
||||
0 0.498047 0.272222 0.261719 0.119444
|
||||
0 0.812500 0.316667 0.323438 0.158333
|
||||
0 0.203125 0.502778 0.367188 0.172222
|
||||
0 0.521094 0.487500 0.207813 0.255556
|
||||
0 0.798047 0.497222 0.303906 0.155556
|
||||
0 0.157031 0.714583 0.264062 0.140278
|
||||
0 0.480469 0.693056 0.321875 0.155556
|
||||
0 0.816406 0.688889 0.318750 0.133333
|
||||
0 0.182812 0.879167 0.314063 0.125000
|
||||
0 0.520312 0.882639 0.340625 0.181944
|
||||
0 0.832812 0.861111 0.260938 0.141667
|
||||
|
Before Width: | Height: | Size: 51 KiB |
@@ -1 +0,0 @@
|
||||
1 0.657812 0.411806 0.189063 0.223611
|
||||
|
Before Width: | Height: | Size: 399 KiB |
@@ -1,2 +0,0 @@
|
||||
1 0.552344 0.384028 0.159375 0.195833
|
||||
1 0.780078 0.595833 0.236719 0.133333
|
||||
|
Before Width: | Height: | Size: 110 KiB |
@@ -1,3 +0,0 @@
|
||||
1 0.508594 0.282639 0.107813 0.151389
|
||||
1 0.521875 0.470833 0.081250 0.100000
|
||||
1 0.527344 0.709722 0.162500 0.133333
|
||||
|
Before Width: | Height: | Size: 2.7 MiB |
@@ -1 +0,0 @@
|
||||
1 0.526953 0.502083 0.303906 0.226389
|
||||
402
data/train.txt
@@ -1,201 +1,201 @@
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0100.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0101.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0102.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0103.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0104.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0105.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0106.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0107.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0108.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0109.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0110.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0111.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0112.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0113.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0114.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0115.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0116.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0117.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0118.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0119.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0120.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0121.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0122.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0123.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0124.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0125.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0126.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0127.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0128.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0129.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0130.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0131.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0132.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0133.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0134.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0135.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0136.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0137.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0138.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0139.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0140.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0141.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0142.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0143.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0144.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0145.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0146.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0147.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0148.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0149.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0150.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0151.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0152.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0153.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0154.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0155.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0156.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0157.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0158.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0159.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0160.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0161.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0162.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0163.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0164.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0165.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0166.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0167.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0168.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0169.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0170.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0171.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0172.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0173.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0174.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0175.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0176.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0177.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0178.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0179.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0180.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0181.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0182.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0183.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0184.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0185.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0186.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0187.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0188.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0189.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0190.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0191.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0192.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0193.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0194.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0195.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0196.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0197.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0198.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0199.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0200.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0201.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0202.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0203.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0204.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0205.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0206.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0207.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0208.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0209.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0210.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0211.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0212.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0213.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0214.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0215.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0216.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0217.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0218.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0219.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0220.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0221.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0222.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0223.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0224.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0225.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0226.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0227.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0228.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0229.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0230.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0231.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0232.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0233.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0234.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0235.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0236.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0237.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0238.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0239.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0240.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0241.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0242.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0243.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0244.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0245.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0246.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0247.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0248.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0249.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0250.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0251.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0252.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0253.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0254.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0255.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0256.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0257.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0258.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0259.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0260.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0261.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0262.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0263.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0264.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0265.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0266.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0267.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0268.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0269.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0270.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0271.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0272.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0273.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0274.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0275.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0276.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0277.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0278.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0279.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0280.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0281.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0282.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0283.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0284.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0285.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0286.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0287.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0288.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0289.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0290.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0291.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0292.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0293.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0294.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0295.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0296.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0297.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0298.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0299.jpg
|
||||
/home/abonvicini/darknetAB/darknet/data/img/thumb0300.jpg
|
||||
data/img/thumb0100.jpg
|
||||
data/img/thumb0101.jpg
|
||||
data/img/thumb0102.jpg
|
||||
data/img/thumb0103.jpg
|
||||
data/img/thumb0104.jpg
|
||||
data/img/thumb0105.jpg
|
||||
data/img/thumb0106.jpg
|
||||
data/img/thumb0107.jpg
|
||||
data/img/thumb0108.jpg
|
||||
data/img/thumb0109.jpg
|
||||
data/img/thumb0110.jpg
|
||||
data/img/thumb0111.jpg
|
||||
data/img/thumb0112.jpg
|
||||
data/img/thumb0113.jpg
|
||||
data/img/thumb0114.jpg
|
||||
data/img/thumb0115.jpg
|
||||
data/img/thumb0116.jpg
|
||||
data/img/thumb0117.jpg
|
||||
data/img/thumb0118.jpg
|
||||
data/img/thumb0119.jpg
|
||||
data/img/thumb0120.jpg
|
||||
data/img/thumb0121.jpg
|
||||
data/img/thumb0122.jpg
|
||||
data/img/thumb0123.jpg
|
||||
data/img/thumb0124.jpg
|
||||
data/img/thumb0125.jpg
|
||||
data/img/thumb0126.jpg
|
||||
data/img/thumb0127.jpg
|
||||
data/img/thumb0128.jpg
|
||||
data/img/thumb0129.jpg
|
||||
data/img/thumb0130.jpg
|
||||
data/img/thumb0131.jpg
|
||||
data/img/thumb0132.jpg
|
||||
data/img/thumb0133.jpg
|
||||
data/img/thumb0134.jpg
|
||||
data/img/thumb0135.jpg
|
||||
data/img/thumb0136.jpg
|
||||
data/img/thumb0137.jpg
|
||||
data/img/thumb0138.jpg
|
||||
data/img/thumb0139.jpg
|
||||
data/img/thumb0140.jpg
|
||||
data/img/thumb0141.jpg
|
||||
data/img/thumb0142.jpg
|
||||
data/img/thumb0143.jpg
|
||||
data/img/thumb0144.jpg
|
||||
data/img/thumb0145.jpg
|
||||
data/img/thumb0146.jpg
|
||||
data/img/thumb0147.jpg
|
||||
data/img/thumb0148.jpg
|
||||
data/img/thumb0149.jpg
|
||||
data/img/thumb0150.jpg
|
||||
data/img/thumb0151.jpg
|
||||
data/img/thumb0152.jpg
|
||||
data/img/thumb0153.jpg
|
||||
data/img/thumb0154.jpg
|
||||
data/img/thumb0155.jpg
|
||||
data/img/thumb0156.jpg
|
||||
data/img/thumb0157.jpg
|
||||
data/img/thumb0158.jpg
|
||||
data/img/thumb0159.jpg
|
||||
data/img/thumb0160.jpg
|
||||
data/img/thumb0161.jpg
|
||||
data/img/thumb0162.jpg
|
||||
data/img/thumb0163.jpg
|
||||
data/img/thumb0164.jpg
|
||||
data/img/thumb0165.jpg
|
||||
data/img/thumb0166.jpg
|
||||
data/img/thumb0167.jpg
|
||||
data/img/thumb0168.jpg
|
||||
data/img/thumb0169.jpg
|
||||
data/img/thumb0170.jpg
|
||||
data/img/thumb0171.jpg
|
||||
data/img/thumb0172.jpg
|
||||
data/img/thumb0173.jpg
|
||||
data/img/thumb0174.jpg
|
||||
data/img/thumb0175.jpg
|
||||
data/img/thumb0176.jpg
|
||||
data/img/thumb0177.jpg
|
||||
data/img/thumb0178.jpg
|
||||
data/img/thumb0179.jpg
|
||||
data/img/thumb0180.jpg
|
||||
data/img/thumb0181.jpg
|
||||
data/img/thumb0182.jpg
|
||||
data/img/thumb0183.jpg
|
||||
data/img/thumb0184.jpg
|
||||
data/img/thumb0185.jpg
|
||||
data/img/thumb0186.jpg
|
||||
data/img/thumb0187.jpg
|
||||
data/img/thumb0188.jpg
|
||||
data/img/thumb0189.jpg
|
||||
data/img/thumb0190.jpg
|
||||
data/img/thumb0191.jpg
|
||||
data/img/thumb0192.jpg
|
||||
data/img/thumb0193.jpg
|
||||
data/img/thumb0194.jpg
|
||||
data/img/thumb0195.jpg
|
||||
data/img/thumb0196.jpg
|
||||
data/img/thumb0197.jpg
|
||||
data/img/thumb0198.jpg
|
||||
data/img/thumb0199.jpg
|
||||
data/img/thumb0200.jpg
|
||||
data/img/thumb0201.jpg
|
||||
data/img/thumb0202.jpg
|
||||
data/img/thumb0203.jpg
|
||||
data/img/thumb0204.jpg
|
||||
data/img/thumb0205.jpg
|
||||
data/img/thumb0206.jpg
|
||||
data/img/thumb0207.jpg
|
||||
data/img/thumb0208.jpg
|
||||
data/img/thumb0209.jpg
|
||||
data/img/thumb0210.jpg
|
||||
data/img/thumb0211.jpg
|
||||
data/img/thumb0212.jpg
|
||||
data/img/thumb0213.jpg
|
||||
data/img/thumb0214.jpg
|
||||
data/img/thumb0215.jpg
|
||||
data/img/thumb0216.jpg
|
||||
data/img/thumb0217.jpg
|
||||
data/img/thumb0218.jpg
|
||||
data/img/thumb0219.jpg
|
||||
data/img/thumb0220.jpg
|
||||
data/img/thumb0221.jpg
|
||||
data/img/thumb0222.jpg
|
||||
data/img/thumb0223.jpg
|
||||
data/img/thumb0224.jpg
|
||||
data/img/thumb0225.jpg
|
||||
data/img/thumb0226.jpg
|
||||
data/img/thumb0227.jpg
|
||||
data/img/thumb0228.jpg
|
||||
data/img/thumb0229.jpg
|
||||
data/img/thumb0230.jpg
|
||||
data/img/thumb0231.jpg
|
||||
data/img/thumb0232.jpg
|
||||
data/img/thumb0233.jpg
|
||||
data/img/thumb0234.jpg
|
||||
data/img/thumb0235.jpg
|
||||
data/img/thumb0236.jpg
|
||||
data/img/thumb0237.jpg
|
||||
data/img/thumb0238.jpg
|
||||
data/img/thumb0239.jpg
|
||||
data/img/thumb0240.jpg
|
||||
data/img/thumb0241.jpg
|
||||
data/img/thumb0242.jpg
|
||||
data/img/thumb0243.jpg
|
||||
data/img/thumb0244.jpg
|
||||
data/img/thumb0245.jpg
|
||||
data/img/thumb0246.jpg
|
||||
data/img/thumb0247.jpg
|
||||
data/img/thumb0248.jpg
|
||||
data/img/thumb0249.jpg
|
||||
data/img/thumb0250.jpg
|
||||
data/img/thumb0251.jpg
|
||||
data/img/thumb0252.jpg
|
||||
data/img/thumb0253.jpg
|
||||
data/img/thumb0254.jpg
|
||||
data/img/thumb0255.jpg
|
||||
data/img/thumb0256.jpg
|
||||
data/img/thumb0257.jpg
|
||||
data/img/thumb0258.jpg
|
||||
data/img/thumb0259.jpg
|
||||
data/img/thumb0260.jpg
|
||||
data/img/thumb0261.jpg
|
||||
data/img/thumb0262.jpg
|
||||
data/img/thumb0263.jpg
|
||||
data/img/thumb0264.jpg
|
||||
data/img/thumb0265.jpg
|
||||
data/img/thumb0266.jpg
|
||||
data/img/thumb0267.jpg
|
||||
data/img/thumb0268.jpg
|
||||
data/img/thumb0269.jpg
|
||||
data/img/thumb0270.jpg
|
||||
data/img/thumb0271.jpg
|
||||
data/img/thumb0272.jpg
|
||||
data/img/thumb0273.jpg
|
||||
data/img/thumb0274.jpg
|
||||
data/img/thumb0275.jpg
|
||||
data/img/thumb0276.jpg
|
||||
data/img/thumb0277.jpg
|
||||
data/img/thumb0278.jpg
|
||||
data/img/thumb0279.jpg
|
||||
data/img/thumb0280.jpg
|
||||
data/img/thumb0281.jpg
|
||||
data/img/thumb0282.jpg
|
||||
data/img/thumb0283.jpg
|
||||
data/img/thumb0284.jpg
|
||||
data/img/thumb0285.jpg
|
||||
data/img/thumb0286.jpg
|
||||
data/img/thumb0287.jpg
|
||||
data/img/thumb0288.jpg
|
||||
data/img/thumb0289.jpg
|
||||
data/img/thumb0290.jpg
|
||||
data/img/thumb0291.jpg
|
||||
data/img/thumb0292.jpg
|
||||
data/img/thumb0293.jpg
|
||||
data/img/thumb0294.jpg
|
||||
data/img/thumb0295.jpg
|
||||
data/img/thumb0296.jpg
|
||||
data/img/thumb0297.jpg
|
||||
data/img/thumb0298.jpg
|
||||
data/img/thumb0299.jpg
|
||||
data/img/thumb0300.jpg
|
||||
|
||||
421
flywms_pipeline_spec.rtf
Normal file
@@ -0,0 +1,421 @@
|
||||
{\rtf1\ansi\deff0
|
||||
{\fonttbl{\f0 Calibri;}{\f1 Consolas;}}
|
||||
\fs24
|
||||
\b Specifica pipeline realtime flywms\par\b0
|
||||
\par
|
||||
\b Obiettivo\par\b0
|
||||
Costruire una pipeline realtime modulare per video/camera, con tre blocchi principali:\par
|
||||
\par
|
||||
{\f1 Capture/Preview\par
|
||||
YOLO Detection\par
|
||||
OCR\par}
|
||||
\par
|
||||
I blocchi lavorano in parallelo, ognuno al proprio ritmo. Se un blocco e' lento, non deve bloccare gli altri. I frame/ROI vecchi possono essere scartati per mantenere bassa la latenza.\par
|
||||
\par
|
||||
\b Principio chiave\par\b0
|
||||
Non elaboriamo necessariamente tutti i frame. Elaboriamo il piu' recente disponibile quando un worker e' libero.\par
|
||||
\par
|
||||
{\f1 meglio saltare frame vecchi\par
|
||||
che accumulare ritardo\par}
|
||||
\par
|
||||
\b Strutture dati\par\b0
|
||||
{\f1 FramePacket\par
|
||||
frame_id: intero crescente\par
|
||||
timestamp: tempo acquisizione\par
|
||||
frame: immagine OpenCV BGR\par
|
||||
width: larghezza\par
|
||||
height: altezza\par
|
||||
source: video/camera\par
|
||||
\par
|
||||
Detection\par
|
||||
class_id\par
|
||||
class_name\par
|
||||
confidence\par
|
||||
bbox: x1, y1, x2, y2\par
|
||||
\par
|
||||
DetectionResult\par
|
||||
frame_id\par
|
||||
timestamp\par
|
||||
detections: lista Detection\par
|
||||
inference_ms\par
|
||||
source_width\par
|
||||
source_height\par
|
||||
\par
|
||||
RoiPacket\par
|
||||
roi_id\par
|
||||
source_frame_id\par
|
||||
timestamp\par
|
||||
class_name\par
|
||||
confidence\par
|
||||
bbox\par
|
||||
roi_image: crop BGR copiato\par
|
||||
width\par
|
||||
height\par
|
||||
\par
|
||||
OcrResult\par
|
||||
roi_id\par
|
||||
source_frame_id\par
|
||||
timestamp\par
|
||||
text\par
|
||||
raw_text\par
|
||||
confidence opzionale\par
|
||||
bbox\par
|
||||
ocr_ms\par}
|
||||
\par
|
||||
\b Buffer\par\b0
|
||||
Usiamo buffer thread-safe "latest", non FIFO classici.\par
|
||||
\par
|
||||
{\f1 LatestBuffer\par
|
||||
max_size\par
|
||||
put(item)\par
|
||||
get_latest_blocking(stop_event)\par
|
||||
get_latest_nowait()\par
|
||||
stats()\par}
|
||||
\par
|
||||
Comportamento:\par
|
||||
\par
|
||||
{\f1 put(item):\par
|
||||
se pieno, elimina elementi vecchi\par
|
||||
inserisce item nuovo\par
|
||||
notifica i worker in attesa\par
|
||||
\par
|
||||
get_latest_blocking():\par
|
||||
se vuoto, aspetta\par
|
||||
quando c'e' almeno un item:\par
|
||||
prende il piu' recente\par
|
||||
scarta gli elementi piu' vecchi\par
|
||||
restituisce item\par}
|
||||
\par
|
||||
Buffer previsti:\par
|
||||
\par
|
||||
{\f1 frame_buffer: FramePacket\par
|
||||
roi_buffer: RoiPacket\par}
|
||||
\par
|
||||
Risultati condivisi:\par
|
||||
\par
|
||||
{\f1 SharedState\par
|
||||
latest_detection_result\par
|
||||
latest_ocr_results\par
|
||||
counters/statistiche\par}
|
||||
\par
|
||||
SharedState va protetto con lock breve.\par
|
||||
\par
|
||||
\b Thread\par\b0
|
||||
{\f1 Main/Capture Thread\par
|
||||
legge frame\par
|
||||
genera FramePacket\par
|
||||
mette FramePacket in frame_buffer\par
|
||||
visualizza preview\par
|
||||
opzionalmente disegna ultimi risultati disponibili\par
|
||||
\par
|
||||
YOLO Worker Thread\par
|
||||
aspetta ultimo FramePacket\par
|
||||
copia il frame fuori lock\par
|
||||
esegue detection\par
|
||||
salva DetectionResult in SharedState\par
|
||||
crea RoiPacket per le etichette utili\par
|
||||
mette RoiPacket in roi_buffer\par
|
||||
aggiorna statistiche\par
|
||||
\par
|
||||
OCR Worker Thread\par
|
||||
aspetta ultimo RoiPacket\par
|
||||
analizza ROI\par
|
||||
salva OcrResult in SharedState/log\par
|
||||
aggiorna statistiche\par}
|
||||
\par
|
||||
\b Thread safety\par\b0
|
||||
Il lock deve proteggere solo operazioni piccole:\par
|
||||
\par
|
||||
{\f1 inserire riferimento nel buffer\par
|
||||
leggere riferimento dal buffer\par
|
||||
aggiornare contatori\par
|
||||
aggiornare latest result\par
|
||||
notify/wait\par}
|
||||
\par
|
||||
Il lock non deve coprire:\par
|
||||
\par
|
||||
{\f1 cap.read()\par
|
||||
frame.copy()\par
|
||||
YOLO forward\par
|
||||
OCR\par
|
||||
cv2.imshow\par
|
||||
conversioni immagine\par}
|
||||
\par
|
||||
\b Politica copie\par\b0
|
||||
Prima versione, robusta:\par
|
||||
\par
|
||||
{\f1 Capture:\par
|
||||
non copia ogni frame\par
|
||||
mette il frame letto nel FramePacket\par
|
||||
\par
|
||||
YOLO:\par
|
||||
prende FramePacket\par
|
||||
fa frame.copy() solo del frame che analizzera'\par
|
||||
\par
|
||||
OCR:\par
|
||||
riceve ROI gia' copiata\par}
|
||||
\par
|
||||
Questo evita corruzione dati e mantiene copie limitate.\par
|
||||
\par
|
||||
\b Politica realtime\par\b0
|
||||
Se YOLO e' lento:\par
|
||||
\par
|
||||
{\f1 non analizza frame arretrati\par
|
||||
prende il piu' recente disponibile\par}
|
||||
\par
|
||||
Se OCR e' lento:\par
|
||||
\par
|
||||
{\f1 non legge ROI vecchie\par
|
||||
prende la ROI piu' recente disponibile\par}
|
||||
\par
|
||||
Questo riduce la latenza.\par
|
||||
\par
|
||||
\b Algoritmo pseudocodice - main/capture\par\b0
|
||||
{\f1 inizializza config\par
|
||||
carica labels\par
|
||||
carica modello YOLO\par
|
||||
apri video/camera\par
|
||||
\par
|
||||
crea stop_event\par
|
||||
crea frame_buffer max_size=N\par
|
||||
crea roi_buffer max_size=M\par
|
||||
crea shared_state\par
|
||||
\par
|
||||
avvia thread yolo_worker\par
|
||||
avvia thread ocr_worker\par
|
||||
\par
|
||||
frame_id = 0\par
|
||||
\par
|
||||
loop main:\par
|
||||
grabbed, frame = cap.read()\par
|
||||
\par
|
||||
se non grabbed:\par
|
||||
stop_event.set()\par
|
||||
break\par
|
||||
\par
|
||||
frame_id += 1\par
|
||||
\par
|
||||
packet = FramePacket(\par
|
||||
frame_id=frame_id,\par
|
||||
timestamp=now(),\par
|
||||
frame=frame,\par
|
||||
width=frame.width,\par
|
||||
height=frame.height,\par
|
||||
source=source_name\par
|
||||
)\par
|
||||
\par
|
||||
frame_buffer.put(packet)\par
|
||||
\par
|
||||
detection_result = shared_state.get_latest_detection()\par
|
||||
ocr_results = shared_state.get_recent_ocr_results()\par
|
||||
\par
|
||||
display_frame = frame.copy()\par
|
||||
draw detections compatibili su display_frame\par
|
||||
draw OCR texts compatibili su display_frame\par
|
||||
\par
|
||||
cv2.imshow("Capture", display_frame)\par
|
||||
\par
|
||||
se premuto q:\par
|
||||
stop_event.set()\par
|
||||
break\par
|
||||
\par
|
||||
attendi chiusura worker\par
|
||||
rilascia video\par
|
||||
chiudi finestre\par}
|
||||
\par
|
||||
\b Algoritmo pseudocodice - YOLO worker\par\b0
|
||||
{\f1 function yolo_worker():\par
|
||||
while not stop_event:\par
|
||||
packet = frame_buffer.get_latest_blocking(stop_event)\par
|
||||
\par
|
||||
se packet e' None:\par
|
||||
continue\par
|
||||
\par
|
||||
local_frame = packet.frame.copy()\par
|
||||
\par
|
||||
t0 = now()\par
|
||||
detections = run_yolo(local_frame)\par
|
||||
inference_ms = now() - t0\par
|
||||
\par
|
||||
result = DetectionResult(\par
|
||||
frame_id=packet.frame_id,\par
|
||||
timestamp=now(),\par
|
||||
detections=detections,\par
|
||||
inference_ms=inference_ms,\par
|
||||
source_width=packet.width,\par
|
||||
source_height=packet.height\par
|
||||
)\par
|
||||
\par
|
||||
shared_state.set_latest_detection(result)\par
|
||||
\par
|
||||
per ogni detection in detections:\par
|
||||
se detection.class_name non e' "etichetta":\par
|
||||
continue\par
|
||||
\par
|
||||
se bbox troppo piccola:\par
|
||||
continue\par
|
||||
\par
|
||||
se OCR cooldown per questa zona non e' scaduto:\par
|
||||
continue\par
|
||||
\par
|
||||
roi = crop local_frame usando bbox espansa\par
|
||||
roi_copy = roi.copy()\par
|
||||
\par
|
||||
roi_packet = RoiPacket(\par
|
||||
roi_id=next_roi_id(),\par
|
||||
source_frame_id=packet.frame_id,\par
|
||||
timestamp=now(),\par
|
||||
class_name=detection.class_name,\par
|
||||
confidence=detection.confidence,\par
|
||||
bbox=detection.bbox,\par
|
||||
roi_image=roi_copy,\par
|
||||
width=roi_copy.width,\par
|
||||
height=roi_copy.height\par
|
||||
)\par
|
||||
\par
|
||||
roi_buffer.put(roi_packet)\par
|
||||
\par
|
||||
aggiorna statistiche yolo\par}
|
||||
\par
|
||||
\b Algoritmo pseudocodice - OCR worker\par\b0
|
||||
{\f1 function ocr_worker():\par
|
||||
while not stop_event:\par
|
||||
roi_packet = roi_buffer.get_latest_blocking(stop_event)\par
|
||||
\par
|
||||
se roi_packet e' None:\par
|
||||
continue\par
|
||||
\par
|
||||
t0 = now()\par
|
||||
processed = preprocess_for_ocr(roi_packet.roi_image)\par
|
||||
text, raw_text = run_ocr(processed)\par
|
||||
ocr_ms = now() - t0\par
|
||||
\par
|
||||
result = OcrResult(\par
|
||||
roi_id=roi_packet.roi_id,\par
|
||||
source_frame_id=roi_packet.source_frame_id,\par
|
||||
timestamp=now(),\par
|
||||
text=text,\par
|
||||
raw_text=raw_text,\par
|
||||
bbox=roi_packet.bbox,\par
|
||||
ocr_ms=ocr_ms\par
|
||||
)\par
|
||||
\par
|
||||
shared_state.add_ocr_result(result)\par
|
||||
\par
|
||||
se text valido:\par
|
||||
logga risultato\par
|
||||
\par
|
||||
aggiorna statistiche ocr\par}
|
||||
\par
|
||||
\b LatestBuffer pseudocodice\par\b0
|
||||
{\f1 class LatestBuffer:\par
|
||||
items = deque(maxlen=max_size)\par
|
||||
condition = Condition()\par
|
||||
pushed = 0\par
|
||||
popped = 0\par
|
||||
dropped = 0\par
|
||||
\par
|
||||
put(item):\par
|
||||
with condition:\par
|
||||
before = len(items)\par
|
||||
\par
|
||||
se before == max_size:\par
|
||||
dropped += 1\par
|
||||
\par
|
||||
items.append(item)\par
|
||||
pushed += 1\par
|
||||
condition.notify_all()\par
|
||||
\par
|
||||
get_latest_blocking(stop_event):\par
|
||||
with condition:\par
|
||||
while items e' vuoto and not stop_event.is_set():\par
|
||||
condition.wait(timeout=0.1)\par
|
||||
\par
|
||||
se stop_event.is_set():\par
|
||||
return None\par
|
||||
\par
|
||||
latest = items[-1]\par
|
||||
skipped = len(items) - 1\par
|
||||
dropped += skipped\par
|
||||
items.clear()\par
|
||||
popped += 1\par
|
||||
\par
|
||||
return latest\par}
|
||||
\par
|
||||
\b SharedState pseudocodice\par\b0
|
||||
{\f1 class SharedState:\par
|
||||
lock\par
|
||||
latest_detection_result\par
|
||||
ocr_results_deque maxlen=100\par
|
||||
stats\par
|
||||
\par
|
||||
set_latest_detection(result):\par
|
||||
with lock:\par
|
||||
latest_detection_result = result\par
|
||||
\par
|
||||
get_latest_detection():\par
|
||||
with lock:\par
|
||||
return latest_detection_result\par
|
||||
\par
|
||||
add_ocr_result(result):\par
|
||||
with lock:\par
|
||||
ocr_results_deque.append(result)\par
|
||||
\par
|
||||
get_recent_ocr_results():\par
|
||||
with lock:\par
|
||||
return copia lista risultati recenti\par}
|
||||
\par
|
||||
\b Statistiche minime\par\b0
|
||||
Da stampare ogni N secondi:\par
|
||||
\par
|
||||
{\f1 capture_fps\par
|
||||
yolo_fps\par
|
||||
ocr_fps\par
|
||||
frame_buffer pushed/popped/dropped\par
|
||||
roi_buffer pushed/popped/dropped\par
|
||||
avg_yolo_ms\par
|
||||
avg_ocr_ms\par
|
||||
last_frame_id\par
|
||||
last_yolo_frame_id\par
|
||||
last_ocr_frame_id\par
|
||||
latency_yolo_ms\par
|
||||
latency_ocr_ms\par}
|
||||
\par
|
||||
\b Configurazione iniziale\par\b0
|
||||
{\f1 --video testhd.mp4\par
|
||||
--frame-buffer-size 10\par
|
||||
--roi-buffer-size 20\par
|
||||
--min-confidence 0.30\par
|
||||
--label-class etichetta\par
|
||||
--max-roi-per-frame 2\par
|
||||
--ocr-min-digits 2\par
|
||||
--preview-width 1280\par
|
||||
--backend cpu|cuda|cuda-fp16\par
|
||||
--debug-yolo-window\par
|
||||
--debug-ocr-window\par}
|
||||
\par
|
||||
\b Prima versione: cosa evitare\par\b0
|
||||
Per la prima versione eviterei:\par
|
||||
\par
|
||||
{\f1 Dear PyGui\par
|
||||
PaddleOCR\par
|
||||
modello YOLO moderno\par
|
||||
tracking complesso\par}
|
||||
\par
|
||||
Prima validiamo la pipeline con OpenCV window + YOLO attuale + OCR attuale. Poi sostituiamo i motori uno alla volta.\par
|
||||
\par
|
||||
\b Decisione architetturale\par\b0
|
||||
Questa pipeline privilegia:\par
|
||||
\par
|
||||
{\f1 bassa latenza\par
|
||||
fluidita' realtime\par
|
||||
uso controllato della memoria\par
|
||||
misurabilita'\par}
|
||||
\par
|
||||
e sacrifica:\par
|
||||
\par
|
||||
{\f1 analisi completa di ogni frame\par
|
||||
ordine perfetto di output per ogni frame\par}
|
||||
\par
|
||||
Per un sistema operativo realtime e' il compromesso giusto.\par
|
||||
}
|
||||
1
pip-before-opencv-cuda.txt
Normal file
@@ -0,0 +1 @@
|
||||
imutils==0.5.4
|
||||