diff --git a/__pycache__/main.cpython-39.pyc b/__pycache__/main.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..712512dcc36dce0b1150fc11d1519c691587d4be Binary files /dev/null and b/__pycache__/main.cpython-39.pyc differ diff --git a/crop/__init__.py b/crop/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/crop/__pycache__/__init__.cpython-39.pyc b/crop/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23734692590ae5493f852f2fc189965818cfe180 Binary files /dev/null and b/crop/__pycache__/__init__.cpython-39.pyc differ diff --git a/crop/__pycache__/autocrop.cpython-39.pyc b/crop/__pycache__/autocrop.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..301268a0174bf405d153e3e6e3e6cf1a6439a015 Binary files /dev/null and b/crop/__pycache__/autocrop.cpython-39.pyc differ diff --git a/crop/autocrop.py b/crop/autocrop.py index dd1f6acf47d7d4f24f83a83c91ff8abaaf0cfbe1..90995d6cc08e0f0605f01ffe92c473cdcc1c109a 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 0000000000000000000000000000000000000000..41bd01d1b15111add8b4a1a75f5a63a0151c83bd --- /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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/transfer/__pycache__/__init__.cpython-39.pyc b/transfer/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf43265181abad488699d75cf62cafc472a7f20c Binary files /dev/null and b/transfer/__pycache__/__init__.cpython-39.pyc differ diff --git a/transfer/__pycache__/transfer.cpython-39.pyc b/transfer/__pycache__/transfer.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..278ae665211d8fccca80e0299449b1250c3dd623 Binary files /dev/null and b/transfer/__pycache__/transfer.cpython-39.pyc differ diff --git a/transfer/output.csv b/transfer/output.csv new file mode 100644 index 0000000000000000000000000000000000000000..a09207ae47b8ba26e558041bb2199c92158f7951 --- /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 0039c8bb3803908f2515709bb08ff64ac638929f..8f2a0df1a44f8a43ea5e28e3f10431a601ca7900 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 d1ddd3c93224e571a66b377bb4f2b5c23a7060a4..6ed2a482bb4afac280af8a1f6b4fd7aa8f8e5182 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