From a19d55a3a2e43446580c4643e2a1c235ea241a4e Mon Sep 17 00:00:00 2001 From: Sam Pasquesi <spasquesi19@gmail.com> Date: Fri, 14 Apr 2023 14:58:56 -0500 Subject: [PATCH] main.py --- __pycache__/main.cpython-39.pyc | Bin 0 -> 197 bytes crop/__init__.py | 0 crop/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 167 bytes crop/__pycache__/autocrop.cpython-39.pyc | Bin 0 -> 2452 bytes crop/autocrop.py | 2 -- main.py | 1 + transfer/__init__.py | 0 transfer/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 171 bytes transfer/__pycache__/transfer.cpython-39.pyc | Bin 0 -> 1901 bytes transfer/output.csv | 4 +++ transfer/transfer.ipynb | 33 +++++++++---------- transfer/transfer.py | 32 +++++++++++------- 12 files changed, 42 insertions(+), 30 deletions(-) create mode 100644 __pycache__/main.cpython-39.pyc create mode 100644 crop/__init__.py create mode 100644 crop/__pycache__/__init__.cpython-39.pyc create mode 100644 crop/__pycache__/autocrop.cpython-39.pyc create mode 100644 main.py create mode 100644 transfer/__init__.py create mode 100644 transfer/__pycache__/__init__.cpython-39.pyc create mode 100644 transfer/__pycache__/transfer.cpython-39.pyc create mode 100644 transfer/output.csv diff --git a/__pycache__/main.cpython-39.pyc b/__pycache__/main.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..712512dcc36dce0b1150fc11d1519c691587d4be GIT binary patch literal 197 zcmYe~<>g`kg6)eeQzU@&V-N=!FabFZKwQiNBvKes7;_k+7*iO788n$*0!0}7G?}6V zONtWniqley^k9rA4j5}CLlMXbF!9S-KeRZts8~NeKfgFNC%-JUNWVP4D7&~IF*#K~ zz#}r)*xXP*y(qu5K-a)fw;-dk7$~4yTwr8iWUQZ?n3<<nP<e~PCO1E&G$+-L5oqpb GkQ)F=)G^cm literal 0 HcmV?d00001 diff --git a/crop/__init__.py b/crop/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/crop/__pycache__/__init__.cpython-39.pyc b/crop/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23734692590ae5493f852f2fc189965818cfe180 GIT binary patch literal 167 zcmYe~<>g`kf=%-*Q$X}%5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HIerR!OQL%n{ zetvOkPJUTxk$!o8QFd`bVsff}fJbDovALmsdQpC9fv$m}Zb3$6F;GCaxWLH3$XGwQ jD8E2IK0Y%qvm`!Vub}c4hfQvNN@-529mtl?K+FIDklZK2 literal 0 HcmV?d00001 diff --git a/crop/__pycache__/autocrop.cpython-39.pyc b/crop/__pycache__/autocrop.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..301268a0174bf405d153e3e6e3e6cf1a6439a015 GIT binary patch literal 2452 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 Up8Y2oHY`FEQ9S%;{#Cy8KNR$2P5=M^ literal 0 HcmV?d00001 diff --git a/crop/autocrop.py b/crop/autocrop.py index dd1f6ac..90995d6 100644 --- a/crop/autocrop.py +++ b/crop/autocrop.py @@ -1,8 +1,6 @@ # https://stackoverflow.com/questions/60941012/how-do-i-find-corners-of-a-paper-when-there-are-printed-corners-lines-on-paper-i from PIL import Image -from pillow_heif import register_heif_opener -register_heif_opener() import numpy as np import cv2 import sys diff --git a/main.py b/main.py new file mode 100644 index 0000000..41bd01d --- /dev/null +++ b/main.py @@ -0,0 +1 @@ +import transfer.transfer \ No newline at end of file diff --git a/transfer/__init__.py b/transfer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/transfer/__pycache__/__init__.cpython-39.pyc b/transfer/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf43265181abad488699d75cf62cafc472a7f20c GIT binary patch literal 171 zcmYe~<>g`kf}VMnDIoeWh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10CKeRZts8~Ne zKfgFNC%-JUNWVP4D7&~IF*#K~z#}r)*xXP*y(qu5K-a)fw;-dk7$~4yTwr8iWUOCO ml$ckX2GkNCpP83g5+AQuP<e~PCO1E&G$+*#WYcFLW&i*z^eIsQ literal 0 HcmV?d00001 diff --git a/transfer/__pycache__/transfer.cpython-39.pyc b/transfer/__pycache__/transfer.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..278ae665211d8fccca80e0299449b1250c3dd623 GIT binary patch literal 1901 zcmY*ZPj4GV6rb5$JL`?(IBA;HO`)bFw5EyeBuz_8g@C#eEhS2u0_q54tvxUHI{U9P z>m;_43q?JFsJNC&>kASmzCk6v#-0$I_zFGoW}S+%t9gHC=e_rPZ`PigvIstZ{C=HR zO+x-w%A1e!evC^tG(tGx)Fo`pDWj>bF%7xq>Yl+2s(iYe@v<zN%7#1PnaoUO>gHGu z{TbKtCfVePEzk0h>rL_OFO*Mk^Lv98z~DJ<{Ycp~Ov~Y2@*PFXWNIlwQT~uxvOEvd z&k3J`;&bxCP+s|~@^lEB0TR!`^oX)kD9ypC5p9rfAF|V^&BJN5FTg^4h8IRu{+UX+ zSG)w$E5&DF8Wu(xTRhQ<sdf&u_$^q3b0dusn2Fy;iBj_TB`>n`knfe_clZpSh4Ukw zU4RSmyCZ`2onlLTjxECsMt{mmkc;1g5=OrW1-STxvP)p5yaJQ)`%oFt_%f9E=>?+B zh6_-^Ju9#huZ~Es%1MdzYKpS@n>IdQBJtXYuyt655+bqymr`0!={nLgFU)I%EkC1= zZ@#XIm$1eSxB?se>=W&$2W%5I<Ewlec{9E?BJl?!0!xbSY0orK82f?tt}6_D6P93k z0Z&Ey4Omtge~t5D5Q99?(LcLJo@w%G9dS_aBZUXuA(h2{)O>AKXp*<(9(M$^qd*K$ zH&Gve^aGTQwg^JxnLD1{0VOy}XjAp^$&*2@<GO`QUP2O)n2yLXJ)*I8gq3`wA8W_@ zv2mnx(kEg`#Xr(82W=}M6+O}0`|GT5|G}+*Lj$5T5jM?J=@XwfppA}7Mr849R(LG_ zw=d6AH*ZF87_n>^IDRA(+Wd_Ob!lF0*S?e>WUUhf65L=PMC~9Ddor}!P}~0O(ay%T zwOU66{cyFuwi<Q^5)G>|T(7Th)FNT~au+{&EmXrnk`-X{`wu2nx#_K?CN1JJsK}#j zII{yT)==KIqi*?OP~K@EZWA6ziO3BXPrQxSh^JfZeLy}ub1U$79pRNzxXTYu!r!p^ z3S{fAr$1XmqZ;}hq`j~+ygLZ6q|K&>0J$~M_od3z@oVe#7C_`e^Gbcy5B%nO9XlK~ zTYH_Rg21)I+5tG7ZX|0hkWn>^hO>PazjX(Z)0VaIxh&i6%P8=MSH}6MidM?^g0>ww zfxlAT>U%8^<zTn`X&Ozgl+yw@_-(MnghFFdO;8A2<(pV-RbT3UMOPAP4XvObh5e}7 zmit4^zFhe*(E^!hPQbFV+m9TV%|?6JQV`W$#|7@#ZqO0<6D0pRPM~cCheFLEn^GaG zc0US~APlq#{HYSAZ{N8m6p}21v)=A9{R=xvo5m(2Z-!VNGbQ$-iD)q^m6TB?=B~t= z5amQiS2E!`GE#z}l2YFB6rzN>Z+mD1pUVR$>L!LdA~AY6nRvQrkK^Px;yxA)4||ei zZG_3^%u1U%_UPSyD>2-_<}8z%69e{bm*o(yX5?UlnT{gMI-VNJ@eQ%CjbYQZTi`P5 zz!nI8Q*>G^w<`kA7Q!AdLzSimSz^=i(%3$?B{L2Ohl3;|yLJd{((ilC@eoOti-M+% zgyVNaLBVIL_~WtyOqxxgo+4pLfW5?2$+(UWco=>aCg#rV+n+aYZ#9z4fpD;y>fXFT z)Llx<n^<Dsg^$$FMSg`u-Ku>0DsJjU(?Sa_{j6>vFW{Qf3dnI6T5vy7L+#N`-K2AB R(Rpo2S34{^Pm7vK{{?@!9QptN literal 0 HcmV?d00001 diff --git a/transfer/output.csv b/transfer/output.csv new file mode 100644 index 0000000..a09207a --- /dev/null +++ b/transfer/output.csv @@ -0,0 +1,4 @@ +Image Path, Location, Number of Beetles +test +test +test3 diff --git a/transfer/transfer.ipynb b/transfer/transfer.ipynb index 0039c8b..8f2a0df 100644 --- a/transfer/transfer.ipynb +++ b/transfer/transfer.ipynb @@ -2,23 +2,11 @@ "cells": [ { "cell_type": "code", - "execution_count": 5, + "execution_count": 11, "metadata": {}, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'torch'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[5], line 11\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mcrop\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mautocrop\u001b[39;00m \u001b[39mimport\u001b[39;00m crop\n\u001b[1;32m 10\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mcv2\u001b[39;00m\n\u001b[0;32m---> 11\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mtorch\u001b[39;00m\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'torch'" - ] - } - ], + "outputs": [], "source": [ - "import os, sys\n", + "import os, sys, io\n", "dir2 = os.path.abspath('')\n", "dir1 = os.path.dirname(dir2)\n", "if not dir1 in sys.path: sys.path.append(dir1)\n", @@ -126,10 +114,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "csv_title = 'Image Path, Location, Number of Beetles\\n'\n", + "csv = 'test3\\n'\n", + "csv_path = os.path.join('.', 'output.csv')\n", + "with open(csv_path, 'a+') as csvfile:\n", + " csvfile.seek(0)\n", + " if csvfile.readline().strip() == csv_title.strip():\n", + " csvfile.seek(0, io.SEEK_END)\n", + " else:\n", + " csv = csv_title + csv\n", + " csvfile.write(csv)" + ] }, { "cell_type": "code", diff --git a/transfer/transfer.py b/transfer/transfer.py index d1ddd3c..6ed2a48 100644 --- a/transfer/transfer.py +++ b/transfer/transfer.py @@ -1,11 +1,13 @@ -import os +import os, io import shutil from tkinter.filedialog import askdirectory from tkinter.messagebox import askyesno -from ..crop.autocrop import crop +from crop.autocrop import crop import cv2 +from PIL import Image import torch + def readQR(image : cv2.Mat): qrCodeDetector = cv2.QRCodeDetector() decoded_text, points, _ = qrCodeDetector.detectAndDecode(image) @@ -13,7 +15,6 @@ def readQR(image : cv2.Mat): return '' return decoded_text - # find sd path sd_path = askdirectory(message='Select Path To SD') assert sd_path @@ -28,7 +29,7 @@ save_paths = [] dir = os.fsencode(sd_path) for file in os.listdir(dir): filename = os.fsdecode(file) - if filename.endswith(".png"): + if filename.endswith(".png") or filename.endswith(".jpg"): # save original image to computer src_path = os.path.join(sd_path, filename) dest_path = os.path.join(save_dir, filename) @@ -36,27 +37,36 @@ for file in os.listdir(dir): save_paths.append(dest_path) #load model -model_path = '../yolov5_model/runs/train/many_small_bugs_final/weights/best.pt' +model_path = 'yolov5_model/runs/train/20beetle_40-non_20dirt_bkg_overlap/weights/best.pt' model = torch.hub.load('ultralytics/yolov5', 'custom', model_path) model.eval() # create output csv -csv = 'Image Path, Location, Number of Beetles\n' +csv_title = 'Image Path, Location, Number of Beetles, Confidence\n' +csv = '' for path in save_paths: image = cv2.imread(path) # read QR trap_label = readQR(image) - # crop + # crop + save cropped warped_rgb = crop(image) + Image.fromarray(warped_rgb).save(path+"cropped.jpg") # run model result = model(warped_rgb) - num_beetles = results.pandas().xyxy[0].shape[0] + num_beetles = result.pandas().xyxy[0].shape[0] + confidence = result.pandas().xyxy[0]['confidence'].sum() # update csv - csv += f'{path},{trap_label},{num_beetles}\n' + csv += f'{path},{trap_label},{num_beetles},{confidence}\n' +# save to csv csv_path = os.path.join(save_dir, 'output.csv') -with open(csv_path, 'a') as csvfile: - csvfile.write(csv) +with open(csv_path, 'a+') as csvfile: + csvfile.seek(0) + if csvfile.readline().strip() == csv_title.strip(): + csvfile.seek(0, io.SEEK_END) + else: + csv = csv_title + csv + csvfile.write(csv) \ No newline at end of file -- GitLab