зеркало из
https://github.com/ssciwr/AMMICO.git
synced 2025-10-29 13:06:04 +02:00
remove object_detector (#157)
* `Object_Detector` has been removed from the project --------- Co-authored-by: Inga Ulusoy <inga.ulusoy@uni-heidelberg.de>
Этот коммит содержится в:
родитель
8118aa4830
Коммит
b0a623625f
16
.github/workflows/ci.yml
поставляемый
16
.github/workflows/ci.yml
поставляемый
@ -36,10 +36,10 @@ jobs:
|
||||
run: |
|
||||
cd ammico
|
||||
python -m pytest test/test_cropposts.py -svv --cov=. --cov-report=xml --cov-append
|
||||
# - name: Run pytest test_display
|
||||
# run: |
|
||||
# cd ammico
|
||||
# python -m pytest test/test_display.py -svv --cov=. --cov-report=xml --cov-append
|
||||
- name: Run pytest test_display
|
||||
run: |
|
||||
cd ammico
|
||||
python -m pytest test/test_display.py -svv --cov=. --cov-report=xml --cov-append
|
||||
- name: Run pytest test_faces
|
||||
run: |
|
||||
cd ammico
|
||||
@ -48,11 +48,7 @@ jobs:
|
||||
run: |
|
||||
cd ammico
|
||||
python -m pytest test/test_multimodal_search.py -m "not long" -svv --cov=. --cov-report=xml --cov-append
|
||||
# - name: Run pytest test_objects
|
||||
# run: |
|
||||
# cd ammico
|
||||
# python -m pytest test/test_objects.py -svv --cov=. --cov-report=xml --cov-append
|
||||
- name: Clear cache ubuntu
|
||||
- name: Clear cache ubuntu 1
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
run: |
|
||||
rm -rf ~/.cache/*
|
||||
@ -60,7 +56,7 @@ jobs:
|
||||
run: |
|
||||
cd ammico
|
||||
python -m pytest test/test_summary.py -m "not long" -svv --cov=. --cov-report=xml --cov-append
|
||||
- name: Clear cache2
|
||||
- name: Clear cache ubuntu 2
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
run: |
|
||||
rm -rf ~/.cache/*
|
||||
|
||||
@ -7,7 +7,6 @@ from ammico.cropposts import crop_media_posts, crop_posts_from_refs
|
||||
from ammico.display import AnalysisExplorer
|
||||
from ammico.faces import EmotionDetector
|
||||
from ammico.multimodal_search import MultimodalSearch
|
||||
from ammico.objects import ObjectDetector
|
||||
from ammico.summary import SummaryDetector
|
||||
from ammico.text import TextDetector, PostprocessText
|
||||
from ammico.utils import find_files, get_dataframe
|
||||
@ -22,7 +21,6 @@ __all__ = [
|
||||
"AnalysisExplorer",
|
||||
"EmotionDetector",
|
||||
"MultimodalSearch",
|
||||
"ObjectDetector",
|
||||
"SummaryDetector",
|
||||
"TextDetector",
|
||||
"PostprocessText",
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
import ammico.faces as faces
|
||||
import ammico.text as text
|
||||
import ammico.objects as objects
|
||||
import ammico.colors as colors
|
||||
from ammico.utils import is_interactive
|
||||
import ammico.summary as summary
|
||||
@ -332,7 +331,6 @@ class AnalysisExplorer:
|
||||
dcc.Dropdown(
|
||||
options=[
|
||||
"TextDetector",
|
||||
"ObjectDetector",
|
||||
"EmotionDetector",
|
||||
"SummaryDetector",
|
||||
"ColorDetector",
|
||||
@ -465,7 +463,6 @@ class AnalysisExplorer:
|
||||
identify_dict = {
|
||||
"EmotionDetector": faces.EmotionDetector,
|
||||
"TextDetector": text.TextDetector,
|
||||
"ObjectDetector": objects.ObjectDetector,
|
||||
"SummaryDetector": summary.SummaryDetector,
|
||||
"ColorDetector": colors.ColorDetector,
|
||||
}
|
||||
|
||||
@ -226,17 +226,7 @@
|
||||
"```\n",
|
||||
"image_dict[\"image_id\"] = ammico.EmotionDetector(image_dict[\"image_id\"], emotion_threshold=50, race_threshold=50).analyse_image()\n",
|
||||
"```\n",
|
||||
"The thresholds can be adapted interactively in the notebook interface and the optimal value can then be used in a subsequent analysis of the whole data set.\n",
|
||||
"\n",
|
||||
"## Object detection\n",
|
||||
"Certain specified objects on the image are detected with the cvlib library and YOLOv4 model. Of the 80 objects from the [yolov library](https://github.com/AlexeyAB/darknet/blob/master/data/coco.names), the detection is restricted to person, bicycle, car, motorcycle, airplane, bus, train, truck, boat, traffic light.\n",
|
||||
"\n",
|
||||
"The analysis returns a dictionary with \"yes\" or \"no\" answers for the detected items: `\"person\": \"yes\", \"bicycle\": \"no\", \"car\": \"no\", \"motorcycle\": \"no\", \"airplane\": \"no\", \"bus\": \"no\", \"train\": \"no\", \"truck\": \"no\", \"boat\": \"no\", \"traffic light\": \"no\", \"cell phone\": \"no\"`.\n",
|
||||
"\n",
|
||||
"The object detection is very straightforward with no further parameters, and is called using\n",
|
||||
"```\n",
|
||||
"image_dict[\"image_id\"] = ammico.ObjectDetector(image_dict[\"image_id\"]).analyse_image()\n",
|
||||
"```"
|
||||
"The thresholds can be adapted interactively in the notebook interface and the optimal value can then be used in a subsequent analysis of the whole data set."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@ -1,203 +0,0 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Objects recognition"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This notebooks shows how to detect objects quickly using [cvlib](https://github.com/arunponnusamy/cvlib) and the [YOLOv4](https://github.com/AlexeyAB/darknet) model. This library detects faces, people, and several inanimate objects; we currently have restricted the output to person, bicycle, car, motorcycle, airplane, bus, train, truck, boat, traffic light, cell phone.\n",
|
||||
"\n",
|
||||
"The first cell is only run on google colab and installs the [ammico](https://github.com/ssciwr/AMMICO) package.\n",
|
||||
"\n",
|
||||
"After that, we can import `ammico` and read in the files given a folder path."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# if running on google colab\n",
|
||||
"# flake8-noqa-cell\n",
|
||||
"import os\n",
|
||||
"\n",
|
||||
"if \"google.colab\" in str(get_ipython()):\n",
|
||||
" # update python version\n",
|
||||
" # install setuptools\n",
|
||||
" # %pip install setuptools==61 -qqq\n",
|
||||
" # install ammico\n",
|
||||
" %pip install git+https://github.com/ssciwr/ammico.git -qqq\n",
|
||||
" # mount google drive for data and API key\n",
|
||||
" from google.colab import drive\n",
|
||||
"\n",
|
||||
" drive.mount(\"/content/drive\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import ammico"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Set an image path as input file path."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Here you need to provide the path to your google drive folder\n",
|
||||
"# or local folder containing the images\n",
|
||||
"mydict = ammico.find_files(\n",
|
||||
" path=\"/content/drive/MyDrive/misinformation-data/\",\n",
|
||||
" limit=10,\n",
|
||||
")\n",
|
||||
"mydict"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Detect objects and directly write to csv\n",
|
||||
"You can directly carry out the analysis and export the result into a csv. This may take a while depending on how many images you have loaded."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"for key in mydict:\n",
|
||||
" mydict[key] = ammico.ObjectDetector(mydict[key]).analyse_image()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Convert the dictionary of dictionarys into a dictionary with lists:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"outdict = ammico.append_data_to_dict(mydict)\n",
|
||||
"df = ammico.dump_df(outdict)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Check the dataframe:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df.head(10)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Write the csv file:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df.to_csv(\"/content/drive/MyDrive/misinformation-data/data_out.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Manually inspect what was detected\n",
|
||||
"\n",
|
||||
"To check the analysis, you can inspect the analyzed elements here. Loading the results takes a moment, so please be patient. If you are sure of what you are doing, you can directly export a csv file in the step above.\n",
|
||||
"Here, we display the object detection results provided by the above library. Click on the tabs to see the results in the right sidebar. You may need to increment the `port` number if you are already running several notebook instances on the same server."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"analysis_explorer = ammico.AnalysisExplorer(mydict)\n",
|
||||
"analysis_explorer.run_server(port=8056)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.11.3"
|
||||
},
|
||||
"vscode": {
|
||||
"interpreter": {
|
||||
"hash": "f1142466f556ab37fe2d38e2897a16796906208adb09fea90ba58bdf8a56f0ba"
|
||||
}
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@ -1,54 +0,0 @@
|
||||
from ammico.utils import AnalysisMethod
|
||||
from ammico.objects_cvlib import ObjectCVLib
|
||||
from ammico.objects_cvlib import init_default_objects
|
||||
|
||||
|
||||
class ObjectDetectorClient(AnalysisMethod):
|
||||
def __init__(self):
|
||||
# The detector is set to CVLib by default
|
||||
self.detector = ObjectCVLib()
|
||||
|
||||
def set_client_to_cvlib(self):
|
||||
"""Set the object detection client to use CVLib."""
|
||||
self.detector = ObjectCVLib()
|
||||
|
||||
def analyse_image(self, subdict=None):
|
||||
"""Localize objects in the given image.
|
||||
|
||||
Args:
|
||||
subdict (dict): The dictionary for an image expression instance.
|
||||
|
||||
Returns:
|
||||
dict: The updated dictionary with object detection results.
|
||||
"""
|
||||
return self.detector.analyse_image(subdict)
|
||||
|
||||
|
||||
class ObjectDetector(AnalysisMethod):
|
||||
od_client = ObjectDetectorClient()
|
||||
|
||||
def __init__(self, subdict: dict):
|
||||
super().__init__(subdict)
|
||||
self.subdict.update(self.set_keys())
|
||||
|
||||
def set_keys(self):
|
||||
"""Set the default object keys for analysis.
|
||||
|
||||
Returns:
|
||||
dict: The dictionary with default object keys.
|
||||
"""
|
||||
return init_default_objects()
|
||||
|
||||
def analyse_image(self):
|
||||
"""Perform object detection on the image.
|
||||
|
||||
Returns:
|
||||
dict: The updated dictionary with object detection results.
|
||||
"""
|
||||
self.subdict = ObjectDetector.od_client.analyse_image(self.subdict)
|
||||
return self.subdict
|
||||
|
||||
@staticmethod
|
||||
def set_client_to_cvlib():
|
||||
"""Set the object detection client to use CVLib."""
|
||||
ObjectDetector.od_client.set_client_to_cvlib()
|
||||
@ -1,77 +0,0 @@
|
||||
import cv2
|
||||
import cvlib as cv
|
||||
|
||||
|
||||
def objects_from_cvlib(objects_list: list) -> dict:
|
||||
objects = init_default_objects()
|
||||
for key in objects:
|
||||
if key in objects_list:
|
||||
objects[key] = "yes"
|
||||
return objects
|
||||
|
||||
|
||||
def init_default_objects():
|
||||
objects = {
|
||||
"person": "no",
|
||||
"bicycle": "no",
|
||||
"car": "no",
|
||||
"motorcycle": "no",
|
||||
"airplane": "no",
|
||||
"bus": "no",
|
||||
"train": "no",
|
||||
"truck": "no",
|
||||
"boat": "no",
|
||||
"traffic light": "no",
|
||||
"cell phone": "no",
|
||||
}
|
||||
return objects
|
||||
|
||||
|
||||
class ObjectsMethod:
|
||||
"""Base class to be inherited by all objects methods."""
|
||||
|
||||
def __init__(self):
|
||||
# initialize in child class
|
||||
pass
|
||||
|
||||
def analyse_image(self, subdict):
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
class ObjectCVLib(ObjectsMethod):
|
||||
def __init__(self, client_type=1):
|
||||
# as long as imageai is not activated this remains empty
|
||||
pass
|
||||
|
||||
def detect_objects_cvlib(self, image_path):
|
||||
"""Localize objects in the local image.
|
||||
|
||||
Args:
|
||||
image_path: The path to the local file.
|
||||
"""
|
||||
img = cv2.imread(image_path)
|
||||
|
||||
_, label, _ = cv.detect_common_objects(img)
|
||||
objects = objects_from_cvlib(label)
|
||||
return objects
|
||||
|
||||
def analyse_image_from_file(self, image_path):
|
||||
"""Localize objects in the local image.
|
||||
|
||||
Args:
|
||||
image_path: The path to the local file.
|
||||
"""
|
||||
objects = self.detect_objects_cvlib(image_path)
|
||||
return objects
|
||||
|
||||
def analyse_image(self, subdict):
|
||||
"""Localize objects in the local image.
|
||||
|
||||
Args:
|
||||
subdict: The dictionary for an image expression instance.
|
||||
"""
|
||||
objects = self.analyse_image_from_file(subdict["filename"])
|
||||
for key in objects:
|
||||
subdict[key] = objects[key]
|
||||
|
||||
return subdict
|
||||
@ -1 +0,0 @@
|
||||
{"person": "yes", "bicycle": "no", "car": "yes", "motorcycle": "no", "airplane": "no", "bus": "yes", "train": "no", "truck": "no", "boat": "no", "traffic light": "no", "cell phone": "no"}
|
||||
@ -1 +0,0 @@
|
||||
{"filename": "IMG_2809.png", "person": "yes", "bicycle": "no", "car": "yes", "motorcycle": "no", "airplane": "no", "bus": "yes", "train": "no", "truck": "no", "boat": "no", "traffic light": "no", "cell phone": "no"}
|
||||
@ -37,40 +37,11 @@ def test_explore_analysis_faces(get_path):
|
||||
assert sub_dict[key] == outs[key]
|
||||
|
||||
|
||||
def test_explore_analysis_objects(get_path):
|
||||
mydict = {"IMG_2809": {"filename": get_path + "IMG_2809.png"}}
|
||||
with open(get_path + "example_analysis_objects.json", "r") as file:
|
||||
outs = json.load(file)
|
||||
mydict["IMG_2809"].pop("filename", None)
|
||||
for im_key in mydict.keys():
|
||||
sub_dict = mydict[im_key]
|
||||
for key in sub_dict.keys():
|
||||
assert sub_dict[key] == outs[key]
|
||||
|
||||
|
||||
def test_AnalysisExplorer(get_AE, get_options):
|
||||
get_AE.update_picture(get_options[0])
|
||||
assert get_AE.update_picture(None) is None
|
||||
|
||||
|
||||
def test_right_output_analysis_objects(get_AE, get_options):
|
||||
get_AE._right_output_analysis(
|
||||
2,
|
||||
get_options[3],
|
||||
get_options[0],
|
||||
"ObjectDetector",
|
||||
True,
|
||||
None,
|
||||
None,
|
||||
50,
|
||||
50,
|
||||
"CIE 1976",
|
||||
"summary_and_questions",
|
||||
"base",
|
||||
"How many people are in the picture?",
|
||||
)
|
||||
|
||||
|
||||
def test_right_output_analysis_emotions(get_AE, get_options):
|
||||
get_AE._right_output_analysis(
|
||||
2,
|
||||
|
||||
@ -1,94 +0,0 @@
|
||||
import json
|
||||
import pytest
|
||||
import ammico.objects as ob
|
||||
import ammico.objects_cvlib as ob_cvlib
|
||||
import sys
|
||||
|
||||
OBJECT_1 = "cell phone"
|
||||
OBJECT_2 = "motorcycle"
|
||||
OBJECT_3 = "traffic light"
|
||||
TEST_IMAGE_1 = "IMG_2809.png"
|
||||
JSON_1 = "example_objects_cvlib.json"
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def default_objects():
|
||||
return ob.init_default_objects()
|
||||
|
||||
|
||||
def test_objects_from_cvlib(default_objects):
|
||||
objects_list = [OBJECT_1, OBJECT_2, OBJECT_3]
|
||||
objects = ob_cvlib.objects_from_cvlib(objects_list)
|
||||
out_objects = default_objects
|
||||
for obj in objects_list:
|
||||
out_objects[obj] = "yes"
|
||||
|
||||
assert str(objects) == str(out_objects)
|
||||
|
||||
|
||||
def test_analyse_image_cvlib(get_path):
|
||||
mydict = {"filename": get_path + TEST_IMAGE_1}
|
||||
ob_cvlib.ObjectCVLib().analyse_image(mydict)
|
||||
|
||||
with open(get_path + JSON_1, "r") as file:
|
||||
out_dict = json.load(file)
|
||||
out_dict["filename"] = get_path + out_dict["filename"]
|
||||
for key in mydict.keys():
|
||||
assert mydict[key] == out_dict[key]
|
||||
|
||||
|
||||
def test_init_default_objects():
|
||||
default_obj_list = [
|
||||
"person",
|
||||
"bicycle",
|
||||
"car",
|
||||
OBJECT_2,
|
||||
"airplane",
|
||||
"bus",
|
||||
"train",
|
||||
"truck",
|
||||
"boat",
|
||||
OBJECT_3,
|
||||
OBJECT_1,
|
||||
]
|
||||
init_objects = ob_cvlib.init_default_objects()
|
||||
for obj in default_obj_list:
|
||||
assert init_objects[obj] == "no"
|
||||
|
||||
|
||||
def test_analyse_image_from_file_cvlib(get_path):
|
||||
file_path = get_path + TEST_IMAGE_1
|
||||
objs = ob_cvlib.ObjectCVLib().analyse_image_from_file(file_path)
|
||||
|
||||
with open(get_path + JSON_1, "r") as file:
|
||||
out_dict = json.load(file)
|
||||
out_dict["filename"] = get_path + out_dict["filename"]
|
||||
for key in objs.keys():
|
||||
assert objs[key] == out_dict[key]
|
||||
|
||||
|
||||
def test_detect_objects_cvlib(get_path):
|
||||
file_path = get_path + TEST_IMAGE_1
|
||||
objs = ob_cvlib.ObjectCVLib().detect_objects_cvlib(file_path)
|
||||
|
||||
with open(get_path + JSON_1, "r") as file:
|
||||
out_dict = json.load(file)
|
||||
for key in objs.keys():
|
||||
assert objs[key] == out_dict[key]
|
||||
|
||||
|
||||
def test_set_keys(default_objects, get_path):
|
||||
mydict = {"filename": get_path + TEST_IMAGE_1}
|
||||
key_objs = ob.ObjectDetector(mydict).set_keys()
|
||||
assert str(default_objects) == str(key_objs)
|
||||
|
||||
|
||||
def test_analyse_image(get_path):
|
||||
mydict = {"filename": get_path + TEST_IMAGE_1}
|
||||
ob.ObjectDetector.set_client_to_cvlib()
|
||||
ob.ObjectDetector(mydict).analyse_image()
|
||||
with open(get_path + JSON_1, "r") as file:
|
||||
out_dict = json.load(file)
|
||||
out_dict["filename"] = get_path + out_dict["filename"]
|
||||
|
||||
assert str(mydict) == str(out_dict)
|
||||
@ -1,214 +0,0 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Objects recognition"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This notebooks shows how to detect objects quickly using [cvlib](https://github.com/arunponnusamy/cvlib) and the [YOLOv4](https://github.com/AlexeyAB/darknet) model. This library detects faces, people, and several inanimate objects; we currently have restricted the output to person, bicycle, car, motorcycle, airplane, bus, train, truck, boat, traffic light, cell phone.\n",
|
||||
"\n",
|
||||
"The first cell is only run on google colab and installs the [ammico](https://github.com/ssciwr/AMMICO) package.\n",
|
||||
"\n",
|
||||
"After that, we can import `ammico` and read in the files given a folder path."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# if running on google colab\n",
|
||||
"# flake8-noqa-cell\n",
|
||||
"import os\n",
|
||||
"\n",
|
||||
"if \"google.colab\" in str(get_ipython()):\n",
|
||||
" # update python version\n",
|
||||
" # install setuptools\n",
|
||||
" # %pip install setuptools==61 -qqq\n",
|
||||
" # install ammico\n",
|
||||
" %pip install git+https://github.com/ssciwr/ammico.git -qqq\n",
|
||||
" # mount google drive for data and API key\n",
|
||||
" from google.colab import drive\n",
|
||||
"\n",
|
||||
" drive.mount(\"/content/drive\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import ammico\n",
|
||||
"from ammico import utils as mutils\n",
|
||||
"from ammico import display as mdisplay\n",
|
||||
"import ammico.objects as ob"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Set an image path as input file path."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Here you need to provide the path to your google drive folder\n",
|
||||
"# or local folder containing the images\n",
|
||||
"images = mutils.find_files(\n",
|
||||
" path=\"data/\",\n",
|
||||
" limit=10,\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"mydict = mutils.initialize_dict(images)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Detect objects and directly write to csv\n",
|
||||
"You can directly carry out the analysis and export the result into a csv. This may take a while depending on how many images you have loaded."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"for key in mydict:\n",
|
||||
" mydict[key] = ob.ObjectDetector(mydict[key]).analyse_image()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Convert the dictionary of dictionarys into a dictionary with lists:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"outdict = mutils.append_data_to_dict(mydict)\n",
|
||||
"df = mutils.dump_df(outdict)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Check the dataframe:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df.head(10)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Write the csv file:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df.to_csv(\"data_out.csv\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Manually inspect what was detected\n",
|
||||
"\n",
|
||||
"To check the analysis, you can inspect the analyzed elements here. Loading the results takes a moment, so please be patient. If you are sure of what you are doing, you can directly export a csv file in the step above.\n",
|
||||
"Here, we display the object detection results provided by the above library. Click on the tabs to see the results in the right sidebar. You may need to increment the `port` number if you are already running several notebook instances on the same server."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"analysis_explorer = mdisplay.AnalysisExplorer(mydict, identify=\"objects\")\n",
|
||||
"analysis_explorer.run_server(port=8056)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.16"
|
||||
},
|
||||
"vscode": {
|
||||
"interpreter": {
|
||||
"hash": "f1142466f556ab37fe2d38e2897a16796906208adb09fea90ba58bdf8a56f0ba"
|
||||
}
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
@ -23,7 +23,6 @@ classifiers = [
|
||||
|
||||
dependencies = [
|
||||
"bertopic<=0.14.1",
|
||||
"cvlib @ git+https://github.com/iulusoy/cvlib.git@iulusoy-patch-1",
|
||||
"dash>=2.11.0",
|
||||
"deepface<=0.0.75",
|
||||
"googletrans==3.1.0a0",
|
||||
|
||||
Загрузка…
x
Ссылка в новой задаче
Block a user