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