From b01fabdf4bedefe217ffa7686b614fbe4d5b7280 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sviatoslav=20K=C3=B6nig?= Date: Mon, 6 Jan 2025 17:07:12 +0300 Subject: [PATCH] Delete fastAPI_app/attached_assets directory --- ...ed-to-the-last-20-lines--1736149891609.txt | 45 ---- .../attached_assets/docs/CODE_OF_CONDUCT.md | 94 -------- .../attached_assets/docs/CONTRIBUTING.md | 80 ------- .../attached_assets/docs/readme/README_CN.md | 200 ----------------- .../attached_assets/docs/readme/README_GE.md | 203 ------------------ .../attached_assets/docs/readme/README_JP.md | 202 ----------------- .../attached_assets/docs/readme/README_KR.md | 202 ----------------- .../attached_assets/docs/readme/README_RU.md | 201 ----------------- fastAPI_app/attached_assets/static/scripts.js | 53 ----- fastAPI_app/attached_assets/static/styles.css | 166 -------------- 10 files changed, 1446 deletions(-) delete mode 100644 fastAPI_app/attached_assets/Pasted-nix-error-building-nix-env-exit-status-1-Output-has-been-trimmed-to-the-last-20-lines--1736149891609.txt delete mode 100644 fastAPI_app/attached_assets/docs/CODE_OF_CONDUCT.md delete mode 100644 fastAPI_app/attached_assets/docs/CONTRIBUTING.md delete mode 100644 fastAPI_app/attached_assets/docs/readme/README_CN.md delete mode 100644 fastAPI_app/attached_assets/docs/readme/README_GE.md delete mode 100644 fastAPI_app/attached_assets/docs/readme/README_JP.md delete mode 100644 fastAPI_app/attached_assets/docs/readme/README_KR.md delete mode 100644 fastAPI_app/attached_assets/docs/readme/README_RU.md delete mode 100644 fastAPI_app/attached_assets/static/scripts.js delete mode 100644 fastAPI_app/attached_assets/static/styles.css diff --git a/fastAPI_app/attached_assets/Pasted-nix-error-building-nix-env-exit-status-1-Output-has-been-trimmed-to-the-last-20-lines--1736149891609.txt b/fastAPI_app/attached_assets/Pasted-nix-error-building-nix-env-exit-status-1-Output-has-been-trimmed-to-the-last-20-lines--1736149891609.txt deleted file mode 100644 index 7c5db08..0000000 --- a/fastAPI_app/attached_assets/Pasted-nix-error-building-nix-env-exit-status-1-Output-has-been-trimmed-to-the-last-20-lines--1736149891609.txt +++ /dev/null @@ -1,45 +0,0 @@ -nix error: building nix env: exit status 1 -Output has been trimmed to the last 20 lines - - … while evaluating attribute 'REPLIT_LD_LIBRARY_PATH' of derivation 'nix-shell' - - at «string»:309:9: - - 308| { - 309| REPLIT_LD_LIBRARY_PATH = (pkgs.lib.optionalString (env ? REPLIT_LD_LIBRARY_PATH) (env.REPLIT_LD_LIBRARY_PATH + ":")) + - | ^ - 310| pkgs.lib.makeLibraryPath deps; - - error: attribute 'opencv' missing - - at /home/runner/PICTrace/replit.nix:24:5: - - 23| pkgs.python3Packages.aiohttp - 24| pkgs.python3Packages.opencv - | ^ - 25| pkgs.python3Packages.tensorflow - Did you mean one of opencv3, opencv4, openai or openmm? - -INFO: Will watch for changes in these directories: ['/home/runner/PICTrace'] -INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) -INFO: Started reloader process [3469] using StatReload -2025-01-06 07:50:59.983281: I external/local_xla/xla/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used. -2025-01-06 07:50:59.986418: I external/local_xla/xla/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used. -2025-01-06 07:50:59.995159: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:477] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered -WARNING: All log messages before absl::InitializeLog() is called are written to STDERR -E0000 00:00:1736149860.009122 3475 cuda_dnn.cc:8310] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered -E0000 00:00:1736149860.013027 3475 cuda_blas.cc:1418] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered -2025-01-06 07:51:00.028966: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations. -To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags. -2025-01-06 07:51:02.292488: E external/local_xla/xla/stream_executor/cuda/cuda_driver.cc:152] failed call to cuInit: INTERNAL: CUDA error: Failed call to cuInit: UNKNOWN ERROR (303) -INFO: Started server process [3475] -INFO: Waiting for application startup. -INFO: Application startup complete. -INFO: 172.31.196.107:47808 - "GET / HTTP/1.1" 200 OK -INFO: 172.31.196.107:47808 - "GET /static/styles.css HTTP/1.1" 304 Not Modified -INFO: 172.31.196.107:47808 - "GET /static/scripts.js HTTP/1.1" 304 Not Modified -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [3475] -INFO: Stopping reloader process [3469] \ No newline at end of file diff --git a/fastAPI_app/attached_assets/docs/CODE_OF_CONDUCT.md b/fastAPI_app/attached_assets/docs/CODE_OF_CONDUCT.md deleted file mode 100644 index b1e1ee1..0000000 --- a/fastAPI_app/attached_assets/docs/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,94 +0,0 @@ -# Citizen Code of Conduct - -## 1. Purpose - -A primary goal of PicTrace is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof). - -This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior. - -We invite all those who participate in PicTrace to help us create safe and positive experiences for everyone. - -## 2. Open [Source/Culture/Tech] Citizenship - -A supplemental goal of this Code of Conduct is to increase open [source/culture/tech] citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community. - -Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society. - -If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know. - -## 3. Expected Behavior - -The following behaviors are expected and requested of all community members: - - * Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community. - * Exercise consideration and respect in your speech and actions. - * Attempt collaboration before conflict. - * Refrain from demeaning, discriminatory, or harassing behavior and speech. - * Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential. - * Remember that community event venues may be shared with members of the public; please be respectful to all patrons of these locations. - -## 4. Unacceptable Behavior - -The following behaviors are considered harassment and are unacceptable within our community: - - * Violence, threats of violence or violent language directed against another person. - * Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language. - * Posting or displaying sexually explicit or violent material. - * Posting or threatening to post other people's personally identifying information ("doxing"). - * Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability. - * Inappropriate photography or recording. - * Inappropriate physical contact. You should have someone's consent before touching them. - * Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances. - * Deliberate intimidation, stalking or following (online or in person). - * Advocating for, or encouraging, any of the above behavior. - * Sustained disruption of community events, including talks and presentations. - -## 5. Weapons Policy - -No weapons will be allowed at PicTrace events, community spaces, or in other spaces covered by the scope of this Code of Conduct. Weapons include but are not limited to guns, explosives (including fireworks), and large knives such as those used for hunting or display, as well as any other item used for the purpose of causing injury or harm to others. Anyone seen in possession of one of these items will be asked to leave immediately, and will only be allowed to return without the weapon. Community members are further expected to comply with all state and local laws on this matter. - -## 6. Consequences of Unacceptable Behavior - -Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated. - -Anyone asked to stop unacceptable behavior is expected to comply immediately. - -If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community without warning (and without refund in the case of a paid event). - -## 7. Reporting Guidelines - -If you are subject to or witness unacceptable behavior, or have any other concerns, please notify a community organizer as soon as possible. reveni324@gmail.com. - - - -Additionally, community organizers are available to help community members engage with local law enforcement or to otherwise help those experiencing unacceptable behavior feel safe. In the context of in-person events, organizers will also provide escorts as desired by the person experiencing distress. - -## 8. Addressing Grievances - -If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify with a concise description of your grievance. Your grievance will be handled in accordance with our existing governing policies. - - - -## 9. Scope - -We expect all community participants (contributors, paid or otherwise; sponsors; and other guests) to abide by this Code of Conduct in all community venues--online and in-person--as well as in all one-on-one communications pertaining to community business. - -This code of conduct and its related procedures also applies to unacceptable behavior occurring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members. - -## 10. Contact info - -reveni324@gmail.com - -## 11. License and attribution - -The Citizen Code of Conduct is distributed by [Stumptown Syndicate](http://stumptownsyndicate.org) under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/). - -Portions of text derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy). - -_Revision 2.3. Posted 6 March 2017._ - -_Revision 2.2. Posted 4 February 2016._ - -_Revision 2.1. Posted 23 June 2014._ - -_Revision 2.0, adopted by the [Stumptown Syndicate](http://stumptownsyndicate.org) board on 10 January 2013. Posted 17 March 2013._ diff --git a/fastAPI_app/attached_assets/docs/CONTRIBUTING.md b/fastAPI_app/attached_assets/docs/CONTRIBUTING.md deleted file mode 100644 index 93e0e53..0000000 --- a/fastAPI_app/attached_assets/docs/CONTRIBUTING.md +++ /dev/null @@ -1,80 +0,0 @@ -# Contributing to PicTrace - -Thank you for considering contributing to PicTrace! 🎉 Here are some guidelines to help you get started. - -## Table of Contents - -1. [Getting Started](#getting-started) -2. [How to Contribute](#how-to-contribute) -3. [Code Style](#code-style) -4. [Pull Request Guidelines](#pull-request-guidelines) -5. [Contact](#contact) - -## Getting Started - -1. **Fork the repository** on GitHub by clicking the "Fork" button at the top right of the page. 🍴 - -2. **Clone your fork** to your local machine: - ```bash - git clone https://github.com/your-username/PicTrace.git - cd PicTrace - ``` - -3. **Create a new branch** for your feature or bugfix: - ```bash - git checkout -b feature-or-bugfix-name - ``` - -4. **Set up your environment**: - - Create a virtual environment and activate it: - ```bash - python -m venv venv - source venv/bin/activate # For Linux and MacOS - # .\venv\Scripts\activate # For Windows - ``` - - Install the necessary dependencies: - ```bash - pip install -r requirements.txt - ``` - -## How to Contribute - -### Reporting Bugs 🐛 - -If you find a bug in the project, please **open an issue** on GitHub. Include detailed information about the bug, steps to reproduce it, and any other relevant details. The more information you provide, the easier it will be to fix the issue. - -### Suggesting Features ✨ - -If you have a feature suggestion, feel free to **open an issue** on GitHub. Describe the feature, explain why it would be useful, and provide any implementation ideas you have. We appreciate your input! - -### Submitting Pull Requests 🚀 - -1. Ensure your code follows the [Code Style](#code-style) guidelines and passes all tests. - -2. Write clear, concise commit messages that describe your changes. - -3. Open a pull request (PR) on GitHub. Ensure your PR title and description clearly state the issue being addressed or the feature being added. - -4. Link the pull request to the related issue (if it exists) using keywords like "Closes #issue-number" in the description. - -## Code Style 📝 - -Please follow PEP 8 guidelines for Python code. Consistent code style helps keep the codebase clean and readable. You can use tools like `flake8` and `black` to ensure your code complies with these guidelines. - -To install these tools, run: -```bash -pip install flake8 black -``` - -Pull Request Guidelines ✅ -1. Title your pull request clearly and summarize the changes. -2. Ensure your pull request is based on the latest commit from the main branch. -3. Test your changes thoroughly before submitting the pull request. -4. Provide a detailed description of your changes. - -If your pull request addresses an issue, include the issue number in the description using keywords like "Fixes #issue-number". -Contact 📧 - -If you have any questions or need further assistance, feel free to reach out to me via email or by opening an issue on GitHub. I'm here to help! - -Thank you once again for your contributions! 🙌 Every bit of help improves PicTrace for everyone. diff --git a/fastAPI_app/attached_assets/docs/readme/README_CN.md b/fastAPI_app/attached_assets/docs/readme/README_CN.md deleted file mode 100644 index f171417..0000000 --- a/fastAPI_app/attached_assets/docs/readme/README_CN.md +++ /dev/null @@ -1,200 +0,0 @@ -![Logo](https://github.com/Solrikk/PicTrace/blob/main/assets/OpenCV%20-%20result/bee.jpg) - -
-

- English | - Russian | - German | - Japanese | - Korean | - ⭐Chinese⭐ -

-
- ------------------ - -# PicTrace 🔍 - -_**PicTrace**_ 是一个高效的图像匹配平台,利用 _**OpenCV**_ 进行计算机视觉,利用 _**TensorFlow**_ 和 _**ResNet50模型**_ 进行深度学习,利用 _**aiohttp**_ 进行异步处理,并利用 _**FastAPI**_ Web框架进行快速准确的图像搜索。PicTrace允许用户直接上传图像或提供URL,快速扫描庞大的数据库以查找相似的图像。异步处理确保了平滑和快速的视觉搜索,增强了用户体验。 - -# 在线演示: - -想实时了解 _PicTrace_ 如何工作吗? - -探索我的在线演示,见证我的图像匹配平台的功能。 - -[在线演示](https://PicTrace.replit.app) - **试试看,自己体验一下吧!** - -![PicTrace Demo](https://github.com/Solrikk/PicTrace/blob/main/assets/gif/Pictrace.gif) - -## 目录: -1. [功能 ⚡](#features-⚡) -2. [PicTrace快速入门 🚀](#getting-started-with-pictrace-🚀) - - [先决条件](#prerequisites) - - [设置PicTrace的步骤](#steps-to-set-up-pictrace) - - [启动应用程序](#launching-the-application) -3. [结果: 👨‍💻](#results-👨‍💻) -4. [示例: 📋](#examples-📋) - - [带注释的代码](#code-with-comments) -5. [PicTrace中SSIM的工作原理](#how-ssim-works-in-pictrace) -6. [PicTrace中ORB的工作原理](#how-orb-works-in-pictrace) -7. [结合SSIM和ORB](#combining-ssim-and-orb) -8. [OpenCV (开源计算机视觉库) 🌐](#opencv-open-source-computer-vision-library-🌐) -9. [神经网络模型 (ResNet50) 🧠](#neural-network-model-resnet50-🧠) -10. [相似图像的最终选择](#final-selection-of-similar-images) - -## 功能: ⚡ -- **_支持多种技术_** 💼 - - _**Python**_ 与这些强大的库配合使用: - - **`FastAPI:`** 适用于创建Web应用程序和处理HTTP请求,FastAPI以其高性能和对异步操作的支持而著称。 [详情](https://fastapi.tiangolo.com/) - - **`aiohttp:`** 适合处理异步HTTP请求,如通过URL下载图像,使您的应用程序更快更高效。 [详情](https://docs.aiohttp.org/en/stable/index.html) - - **`OpenCV (cv2):`** 用于高级图像处理的强大计算机视觉库,包括加载、调整大小和比较图像,使其成为与图像相关任务的关键组件。 [详情](https://docs.opencv.org/) - - **`numpy:`** 用于处理多维数组的多功能库,通常与OpenCV一起使用以实现高效的图像处理。 [详情](https://numpy.org/doc/) - - **`scikit-image:`** 特别是,该库的`structural_similarity` (SSIM)函数用于比较图像的相似性,提升您的应用程序在图像匹配中的准确性。 [详情](https://scikit-image.org/docs/stable/auto_examples/transform/plot_ssim.html) - - **`hashlib:`** 用于为每个图像生成唯一哈希,确保每个图像都可以唯一标识并高效管理。 [详情](https://docs.python.org/3/library/hashlib.html) - -- **_支持多种索引_** 🗂️ - - - **`图像哈希:`** 生成图像的唯一哈希,以确保唯一标识和高效管理。 - - **`用ResNet50进行特征提取:`** 利用ResNet50模型从图像中提取强大的特征表示。 - - **`余弦相似度:`** 使用余弦相似度来测量从图像中提取的特征向量之间的相似性。 - ------------------ - -## PicTrace快速入门: 🚀 -_PicTrace是一个功能强大的图像跟踪和比较工具,旨在简化您的开发过程。按照以下步骤设置您的环境并成功启动应用程序。_ - -### 先决条件 -要使用PicTrace,请确保安装了以下组件: - -- **Python 3.8或更高版本:** PicTrace是用Python构建的。您可以从 [官方网站](https://www.python.org/downloads/) 下载Python的最新版本。 -- **pip:** Python的包管理器,Python 3.4及更高版本中已预装。我们将使用pip安装必要的依赖项。 -- **Git:** 需要克隆PicTrace存储库。如果您的系统上尚未安装Git,请按照 [Git官方网站](https://git-scm.com/downloads) 上的安装说明进行安装。 - -### 设置PicTrace的步骤: -1. **克隆存储库** - -_首先,在本地机器上获取PicTrace源代码的副本。使用以下命令从GitHub克隆存储库:_ - -```git clone https://github.com/solrikk/PicTrace.git``` - -2. **_设置虚拟环境:_** ✔️ - -_虚拟环境对于将项目依赖项与全局Python设置隔离开来至关重要,防止不同项目之间的版本冲突。要创建和激活虚拟环境,请执行以下命令:_ - -```bash -python -m venv venv -# Windows -venv\Scripts\activate -# Linux和MacOS -source venv/bin/activate -``` - -3. **_Install dependencies:_** ✔️ - - _This command reads the `requirements.txt` file and installs all listed packages, ensuring that PicTrace has all the necessary components to run smoothly._ -```bash -pip install -r requirements.txt -``` -### _Launching the application:_ -1. **_Start the server:_** -```bash -python app.py -``` -`After starting the server, the application will be available at http://localhost:5000 .` - ------------------ - -## 结果: 👨‍💻 -_对于细节很多且可能有噪声或失真的复杂图像来说,即使相似度在 **20%** 及以上,也能表明存在显著的共同特征。在这种情况下,由于任务的复杂性和算法的局限性,可能会预期低百分比的相似度。_ -|图片 1 vs 图片 2|相似度|图片| -|:-:|:-:|:-:| -||**27.12%**|| -||**25.44%**|| -||**44.16%**|| - -## 示例: 📋 -(**_带注释的代码_**) - -```Python -async def find_similar_images(file_path): - # 从数据库加载数据,其中包含有关图像的信息。 - db_data = load_db() - # 从指定的文件路径读取目标图像。 - target_image = cv2.imread(file_path) - # 使用预训练模型从目标图像中提取特征。 - target_features = extract_features(target_image) - # 创建一个aiohttp异步会话来处理HTTP请求。 - async with aiohttp.ClientSession() as session: - # 为数据库中的每个图像创建compare_images函数的异步任务。 - tasks = [ - compare_images(session, entry, target_features) for entry in db_data - if "url" in entry # 仅对包含图像URL的条目执行比较。 - ] - # 等待所有任务完成并收集结果。 - results = await asyncio.gather(*tasks) - # 过滤结果,仅保留相似度得分大于0的结果。 - valid_results = filter(lambda x: x[0] > 0, results) - # 按相似度得分降序排序过滤后的结果,并取前5名。 - sorted_results = sorted(valid_results, key=lambda x: x[0], reverse=True)[:5] - # 创建一个列表来存储相似图像的URL。 - similar_images = [] - for result in sorted_results: - if result[1]: - similar_images.append(result[1]) - # 返回相似图像的URL列表。 - return similar_images -``` - ------------------ - -## _OpenCV (开源计算机视觉库) 🌐:_ - - - -**OpenCV** 是一个功能强大的计算机视觉库,提供了图像和视频处理工具。它广泛用于与机器视觉、图像识别、视频分析等相关的领域。该库包含了广泛的图像分析算法,例如对象检测、面部识别、运动跟踪、视频操作等等。 - -**OpenCV** 的主要功能包括: -1. **加载和保存图像 🖼️**: 支持各种图像格式,便于图像的加载、调整大小和保存,这对处理大型数据集至关重要。 -2. **图像处理 ✨**: 提供了过滤图像、将图像转换为灰度、调整图像大小、旋转图像等功能。这些在分析前对图像进行预处理时尤为重要。 -3. **对象检测 🔍**: 包含用于检测边缘、角点和其他关键点的算法,有助于在帧中识别和跟踪特定对象。 -4. **对象识别 👁️**: 提供了面部识别、手势和图像与视频中其他对象识别的工具,这对许多计算机视觉应用至关重要。 - -## 神经网络模型 (ResNet50) 🧠: - -![image](https://github.com/Solrikk/PicTrace/assets/70236693/d47bd022-8a05-48fc-b6c8-147ec99520ce) - -**ResNet50** (残差网络) 模型是图像分类和特征提取任务中最受欢迎和最强大的深度学习架构之一。您的神经网络模型 **ResNet50** 具有以下优势: - -1. **深度残差网络 🏗️**: 利用残差网络,简化深度神经网络的训练,允许构建非常深的架构而不会出现梯度消失的风险。 -2. **预训练权重 🎓**: 该模型附带在 ImageNet 数据集上预训练的权重,这可以显著加快训练速度并提高图像分类任务的准确性。 -3. **特征提取 🔑**: 该模型可用于从图像中提取特征,这对认知数据分析和机器学习相关的任务非常有用。 -4. **灵活性 🚀**: 该模型既可用于分类,也可用于提取和比较图像特征的任务,适合您的应用。 - -结合 **OpenCV** 和 **ResNet50**,可以创建强大的计算机视觉应用程序,能够分析视觉数据并执行复杂任务,例如自动对象识别和图像分类。 - ---- - -ORB方法在计算机视觉中尤为流行,适用于对象识别、图像匹配和跟踪相关的任务。这种方法着重于快速找到图像上的关键点,并以便于高效比较的方式对这些关键点进行描述。 - - - -1. **定向FAST (加速分段测试的特征) 🚀:** 该组件负责检测图像上的兴趣点(或关键点)。它会快速识别与周围区域相比显著的角点或边缘。通过这种方式,可以识别图像的显著或独特部分。 -2. **旋转BRIEF (二进制鲁棒独立基本特征) 🔄:** 在找到关键点后,需要为每个关键点创建描述,以便与另一图像的关键点进行比较。BRIEF生成关键点的简要二进制描述,但不具备图像旋转的抗性。这里的"旋转"部分增加了ORB的功能,使其即使在图像旋转时也能稳定描述关键点。 - -将这两种方法结合起来,ORB提供了一种快速且有效的方式,即使在视角、比例或光照变化的情况下,仍能匹配图像。 - -PicTrace使用 **SSIM** 和 **ORB** 方法来查找与上传图像相似的图像。以下是每种方法在您的应用中如何工作并有助于找到相似图像的简化解释: - -## PicTrace中SSIM的工作原理: -1. **调整图像大小 🔧:** 在比较上传的图像和数据库中的每个图像时,两者的尺寸都会调整为相同(256x256像素)。这样标准化了比较,使其更公平且更高效。 -2. **转换为灰度 🌑:** 两者图像都转换为灰度。这简化了比较,通过聚焦于结构和光的强度,而不是被颜色差异分散注意力。 -3. **结构相似性比较 🧩:** SSIM方法然后比较这些灰度图像,以评估其结构相似性。高得分意味着图像在结构上是相似的。 - -## PicTrace中ORB的工作原理: -1. **检测关键点 📍:** ORB首先在上传的图像和每个数据库图像中识别关键点。这些点易于识别,并可在图像之间进行比较。 -2. **描述关键点 🖊️:** 对于每个检测到的关键点,ORB生成一个唯一的描述符,概括关键点的特征。该描述符对于图像旋转是不变的。 -3. **匹配关键点 🔗:** 应用程序将上传的图像与每个数据库图像之间的关键点进行匹配。这个过程涉及找到数据库图像中具有与上传图像相似描述符的关键点。 -4. **评分匹配 🏅:** 两个图像之间匹配的关键点越多,根据ORB计算的相似度分数越高。这个分数反映了图像共享的独特特征的数量。 - -通过结合 **SSIM** 和 **ORB** 方法,提供了一种强大且准确的方式来查找和比较与上传图像相似的图片。 diff --git a/fastAPI_app/attached_assets/docs/readme/README_GE.md b/fastAPI_app/attached_assets/docs/readme/README_GE.md deleted file mode 100644 index 7782ef0..0000000 --- a/fastAPI_app/attached_assets/docs/readme/README_GE.md +++ /dev/null @@ -1,203 +0,0 @@ -![Logo](https://github.com/Solrikk/PicTrace/blob/main/assets/OpenCV%20-%20result/bee.jpg) - -
-

- English | - Russian | - ⭐Deutsch⭐ | - Japanese | - Korean | - Chinese -

-
- ------------------ - -# PicTrace 🔍 - -_**PicTrace**_ ist eine hocheffiziente Bildabgleichsplattform, die Computer Vision mit _**OpenCV**_, Deep Learning mit _**TensorFlow**_ und dem _**ResNet50-Modell**_, asynchrone Verarbeitung mit _**aiohttp**_ sowie das _**FastAPI**_-Webframework für schnelle und genaue Bildersuche nutzt. PicTrace ermöglicht es Benutzern, Bilder direkt hochzuladen oder URLs bereitzustellen und durchforstet schnell eine umfangreiche Datenbank, um ähnliche Bilder zu finden. Asynchrone Verarbeitung sorgt für eine reibungslose und schnelle visuelle Suche und verbessert das Benutzererlebnis. - -# Online-Demos: - -Neugierig zu sehen, wie _PicTrace_ in Echtzeit funktioniert? - -Erkunden Sie mein Online-Demo und erleben Sie die Fähigkeiten meiner Bildabgleichsplattform. - -[Online Demo](https://PicTrace.replit.app) - **Probieren Sie es aus und überzeugen Sie sich selbst!** - -![PicTrace Demo](https://github.com/Solrikk/PicTrace/blob/main/assets/gif/Pictrace.gif) - -## Inhaltsverzeichnis: -1. [Funktionen ⚡](#funktionen-⚡) -2. [Erste Schritte mit PicTrace 🚀](#erste-schritte-mit-pictrace-🚀) - - [Voraussetzungen](#voraussetzungen) - - [Schritte zur Einrichtung von PicTrace](#schritte-zur-einrichtung-von-pictrace) - - [Starten der Anwendung](#starten-der-anwendung) -3. [Ergebnisse: 👨‍💻](#ergebnisse-👨‍💻) -4. [Beispiele: 📋](#beispiele-📋) - - [Code mit Kommentaren](#code-mit-kommentaren) -5. [Wie SSIM in PicTrace funktioniert](#wie-ssim-in-pictrace-funktioniert) -6. [Wie ORB in PicTrace funktioniert](#wie-orb-in-pictrace-funktioniert) -7. [Kombinieren von SSIM und ORB](#kombinieren-von-ssim-und-orb) -8. [OpenCV (Open Source Computer Vision Library) 🌐](#opencv-open-source-computer-vision-library-🌐) -9. [Neuronales Netzwerkmodell (ResNet50) 🧠](#neuronales-netzwerkmodell-resnet50-🧠) -10. [Endauswahl ähnlicher Bilder](#endauswahl-ähnlicher-bilder) - -## Funktionen: ⚡ -- **_Unterstützt mehrere Technologien_** 💼 - - _**Python**_ mit diesen leistungsstarken Bibliotheken: - - **`FastAPI:`** Ideal für die Erstellung von Webanwendungen und die Handhabung von HTTP-Anfragen, bekannt für hohe Leistung und Unterstützung asynchroner Operationen. [Details](https://fastapi.tiangolo.com/) - - **`aiohttp:`** Perfekt für die Handhabung asynchroner HTTP-Anfragen, wie das Herunterladen von Bildern über URLs, wodurch Ihre App schneller und effizienter wird. [Details](https://docs.aiohttp.org/en/stable/index.html) - - **`OpenCV (cv2):`** Eine robuste Computer-Vision-Bibliothek für fortgeschrittene Bildverarbeitung, einschließlich Laden, Größenänderung und Vergleich von Bildern, ein kritischer Bestandteil für Ihre bildbezogenen Aufgaben. [Details](https://docs.opencv.org/) - - **`numpy:`** Eine vielseitige Bibliothek zur Arbeit mit mehrdimensionalen Arrays, oft in Verbindung mit OpenCV für effiziente Bildverarbeitung verwendet. [Mehr Info](https://numpy.org/doc/) - - **`scikit-image:`** Insbesondere die `structural_similarity` (SSIM) Funktion aus dieser Bibliothek wird verwendet, um die Ähnlichkeit von Bildern zu vergleichen und die Genauigkeit Ihrer Anwendung beim Bildabgleich zu erhöhen. [Details](https://scikit-image.org/docs/stable/auto_examples/transform/plot_ssim.html) - - **`hashlib:`** Wird verwendet, um eindeutige Hashes für jedes Bild zu generieren, wodurch jedes Bild eindeutig identifiziert und effizient verwaltet werden kann. [Mehr Info](https://docs.python.org/3/library/hashlib.html) - -- **_Unterstützt mehrere Indizes_** 🗂️ - - - **`Bild-Hashing:`** Erstellen von eindeutigen Hashes für Bilder zur Sicherstellung der eindeutigen Identifikation und effizienten Verwaltung. - - **`Merkmalextraktion mit ResNet50:`** Nutzt das ResNet50-Modell zur Extraktion robuster Merkmalsdarstellungen aus Bildern. - - **`Kosinus-Ähnlichkeit:`** Messen der Ähnlichkeit zwischen Bildern mittels Kosinus-Ähnlichkeit auf den aus den Bildern extrahierten Merkmalsvektoren. - ------------------ - -## Erste Schritte mit PicTrace: 🚀 -_PicTrace ist ein leistungsstarkes Werkzeug zur Bildverfolgung und -vergleichung, das entwickelt wurde, um Ihren Entwicklungsprozess zu optimieren. Befolgen Sie diese Schritte, um Ihre Umgebung einzurichten und die Anwendung erfolgreich zu starten._ - -### Voraussetzungen -Um mit PicTrace zu arbeiten, stellen Sie sicher, dass folgende Komponenten installiert sind: - -- **Python 3.8 oder höher:** PicTrace ist in Python geschrieben. Sie können die neueste Version von Python von der [offiziellen Website](https://www.python.org/downloads/) herunterladen. -- **pip:** Der Paket-Installer für Python, der ab Python 3.4 und höher vorinstalliert ist. Wir verwenden pip, um die notwendigen Abhängigkeiten zu installieren. -- **Git:** Erforderlich zum Klonen des PicTrace-Repositories. Falls Git noch nicht auf Ihrem System installiert ist, folgen Sie den Installationsanweisungen auf der [offiziellen Git-Website](https://git-scm.com/downloads). - -### Schritte zur Einrichtung von PicTrace: -1. **Repository klonen** - -_Zuerst erhalten Sie eine Kopie des PicTrace-Quellcodes auf Ihrem lokalen Computer. Verwenden Sie die folgenden Befehle, um das Repository von GitHub zu klonen:_ - -```git clone https://github.com/solrikk/PicTrace.git``` - -2. **_Set up a virtual environment:_** ✔️ - -_A virtual environment is crucial for isolating the project dependencies from your global Python setup, preventing version conflicts among different projects. To create and activate a virtual environment, execute the following commands:._ - -To create and activate a virtual environment, follow these commands: - -```bash -python -m venv venv -# Windows -venv\Scripts\activate -# Linux и MacOS -source venv/bin/activate -``` - -3. **_Install dependencies:_** ✔️ - - _This command reads the `requirements.txt` file and installs all listed packages, ensuring that PicTrace has all the necessary components to run smoothly._ -```bash -pip install -r requirements.txt -``` -### _Launching the application:_ -1. **_Start the server:_** -```bash -python app.py -``` -`After starting the server, the application will be available at http://localhost:5000 .` - ------------------ - -## Ergebnisse: 👨‍💻 -_Für komplexe Bilder mit vielen Details und möglicher Anwesenheit von Rauschen oder Verzerrungen kann selbst eine Ähnlichkeit auf dem Niveau von **20%** und darüber auf das Vorhandensein signifikanter gemeinsamer Merkmale hinweisen. In solchen Fällen kann aufgrund der Komplexität der Aufgabe und der Einschränkungen des Algorithmus ein niedriger Prozentsatz der Ähnlichkeit erwartet werden._ -|Bild 1 vs Bild 2|Ähnlichkeit|Bild| -|:-:|:-:|:-:| -||**27,12%**|| -||**25,44%**|| -||**44,16%**|| - -## Beispiele: 📋 -(**_Code mit Kommentaren_**) - -```Python -async def find_similar_images(file_path): - # Laden Sie die Daten aus der Datenbank, die Informationen über Bilder enthält. - db_data = load_db() - # Lesen Sie das Zielbild von dem angegebenen Dateipfad. - target_image = cv2.imread(file_path) - # Extrahieren Sie Merkmale aus dem Zielbild unter Verwendung eines vortrainierten Modells. - target_features = extract_features(target_image) - # Erstellen Sie eine aiohttp-asynchrone Sitzung zur Handhabung von HTTP-Anfragen. - async with aiohttp.ClientSession() as session: - # Erstellen Sie asynchrone Aufgaben für die Funktion compare_images für jedes Bild in der Datenbank. - tasks = [ - compare_images(session, entry, target_features) for entry in db_data - if "url" in entry # Vergleiche nur für Einträge, die eine Bild-URL enthalten. - ] - # Warten Sie, bis alle Aufgaben abgeschlossen sind und sammeln Sie die Ergebnisse. - results = await asyncio.gather(*tasks) - # Filtern Sie die Ergebnisse und behalten Sie nur diejenigen mit einem Ähnlichkeitswert größer als 0 bei. - valid_results = filter(lambda x: x[0] > 0, results) - # Sortieren Sie die gefilterten Ergebnisse nach dem Ähnlichkeitswert in absteigender Reihenfolge und nehmen Sie die Top 5. - sorted_results = sorted(valid_results, key=lambda x: x[0], reverse=True)[:5] - # Erstellen Sie eine Liste zur Speicherung der URLs der ähnlichen Bilder. - similar_images = [] - for result in sorted_results: - if result[1]: - similar_images.append(result[1]) - # Geben Sie die Liste der URLs der ähnlichen Bilder zurück. - return similar_images -``` - ------------------ - -## _OpenCV (Open Source Computer Vision Library) 🌐:_ - - - -**OpenCV** ist eine leistungsstarke Computer-Vision-Bibliothek, die Werkzeuge zur Verarbeitung von Bildern und Videos bereitstellt. Sie wird in vielen Bereichen verwendet, die mit maschinellem Sehen, Bilderkennung, Videoanalyse und mehr zu tun haben. Die Bibliothek umfasst eine breite Palette von Algorithmen zur Bildanalyse, wie Objekterkennung, Gesichtserkennung, Bewegungserkennung, Videomanipulation und mehr. - -Die wichtigsten Funktionen von **OpenCV** sind: -1. **Bilder laden und speichern 🖼️**: Unterstützt verschiedene Bildformate und ermöglicht das einfache Laden, Ändern der Größe und Speichern von Bildern, was für die Verarbeitung großer Datenmengen entscheidend ist. -2. **Bildverarbeitung ✨**: Bietet Funktionen zum Filtern von Bildern, Umwandeln in Graustufen, Ändern der Größe, Drehen und anderen Manipulationen. Dies ist wichtig für die Vorverarbeitung von Bildern vor der Analyse. -3. **Objekterkennung 🔍**: Beinhaltet Algorithmen zur Erkennung von Kanten, Ecken und anderen wichtigen Punkten, die helfen, bestimmte Objekte in einem Bild zu identifizieren und zu verfolgen. -4. **Objekterkennung 👁️**: Bietet Werkzeuge zur Erkennung von Gesichtern, Gesten und anderen Objekten in Bildern und Videos, was für viele Computer-Vision-Anwendungen entscheidend ist. - -## Neuronales Netzwerkmodell (ResNet50) 🧠: - -![image](https://github.com/Solrikk/PicTrace/assets/70236693/d47bd022-8a05-48fc-b6c8-147ec99520ce) - -Das **ResNet50**-Modell (Residual Network) ist eine der beliebtesten und leistungsstärksten Deep-Learning-Architekturen für Aufgaben der Bildklassifikation und Merkmalsextraktion. Ihr neuronales Netzwerkmodell **ResNet50** bietet folgende Vorteile: - -1. **Tiefe Residual-Netzwerke 🏗️**: Verwenden Residual-Netzwerke, um das Training tiefer neuronaler Netzwerke zu erleichtern, was den Aufbau sehr tiefer Architekturen ohne das Risiko verschwindender Gradienten ermöglicht. -2. **Vorgefertigte Gewichte 🎓**: Das Modell wird mit vortrainierten Gewichten auf dem ImageNet-Datensatz geliefert, was das Training erheblich beschleunigen und die Genauigkeit bei Bildklassifikationsaufgaben verbessern kann. -3. **Merkmalextraktion 🔑**: Das Modell kann zur Extraktion von Merkmalen aus Bildern verwendet werden, was für Aufgaben der kognitiven Datenanalyse und des maschinellen Lernens nützlich ist. -4. **Flexibilität 🚀**: Das Modell kann sowohl zur Klassifikation als auch zur Extraktion und Vergleich von Bildmerkmalen verwendet werden, was für Ihre Anwendung geeignet ist. - -Zusammen können **OpenCV** und **ResNet50** verwendet werden, um leistungsstarke Computer-Vision-Anwendungen zu erstellen, die visuelle Daten analysieren und komplexe Aufgaben wie die automatische Objekterkennung und Bildklassifikation ausführen können. - ---- - -Die ORB-Methode, die im Computer-Vision-Bereich verwendet wird, ist besonders beliebt für Aufgaben im Zusammenhang mit der Objekterkennung, dem Abgleichen von Bildern und dem Tracking. Diese Methode konzentriert sich darauf, schnell Schlüsselpunkte auf Bildern zu finden und zu beschreiben, um einen effizienten Vergleich zu ermöglichen. - - - -1. **Oriented FAST (Features from Accelerated Segment Test) 🚀:** Diese Komponente ist für die Erkennung von interessanten Punkten (oder Schlüsselpunkten) auf dem Bild verantwortlich. Sie identifiziert schnell Ecken oder Kanten, die sich im Vergleich zu ihrer Umgebung abheben, wodurch signifikante oder einzigartige Bereiche des Bildes identifiziert werden können. - -2. **Rotated BRIEF (Binary Robust Independent Elementary Features) 🔄:** Nachdem die Schlüsselpunkte gefunden wurden, ist es notwendig, eine Beschreibung für jeden zu erstellen, um den Vergleich mit Schlüsselpunkten eines anderen Bildes zu ermöglichen. BRIEF erzeugt eine kurze binäre Beschreibung der Punkte, jedoch fehlt es an Widerstandsfähigkeit gegen Bildrotationen. Hier kommt der Teil "rotated" ins Spiel - ORB fügt die Fähigkeit hinzu, Punkte stabil zu beschreiben, auch wenn Bilder gedreht werden. - -Durch die Kombination dieser beiden Ansätze bietet ORB eine schnelle und effiziente Möglichkeit, Bilder trotz Änderungen des Betrachtungswinkels, der Skalierung oder der Beleuchtung abzugleichen. - -PicTrace verwendet sowohl **SSIM** als auch **ORB**-Methoden, um Bilder zu finden, die einem hochgeladenen Bild ähneln. Hier ist eine vereinfachte Erklärung, wie jede Methode im Kontext Ihrer Anwendung funktioniert und zum Finden ähnlicher Bilder beiträgt: - -## Wie SSIM in PicTrace funktioniert: -1. **Bilder skalieren 🔧:** Beim Vergleich des hochgeladenen Bildes mit jedem Bild in der Datenbank werden beide Bilder auf die gleichen Abmessungen (256x256 Pixel) skaliert. Dies standardisiert den Vergleich und macht ihn fairer und effizienter. -2. **Konvertieren in Graustufen 🌑:** Beide Bilder werden in Graustufen konvertiert. Dies vereinfacht den Vergleich, indem der Fokus auf die Struktur und die Lichtintensität gelegt wird, anstatt durch Farbunterschiede abgelenkt zu werden. -3. **Vergleich der strukturellen Ähnlichkeit 🧩:** Die SSIM-Methode vergleicht dann diese Graustufenbilder, um ihre strukturelle Ähnlichkeit zu bewerten. Ein hoher Wert bedeutet, dass die Bilder strukturell ähnlich sind. - -## Wie ORB in PicTrace funktioniert: -1. **Erkennung von Schlüsselpunkten 📍:** ORB identifiziert zuerst Schlüsselpunkte sowohl auf dem hochgeladenen Bild als auch auf jedem Datenbankbild. Diese Punkte sind leicht erkennbar und können zwischen den Bildern verglichen werden. -2. **Beschreibung der Schlüsselpunkte 🖊️:** Für jeden erkannten Schlüsselpunkt erzeugt ORB einen eindeutigen Deskriptor, der die Merkmale des Schlüsselpunktes zusammenfasst. Dieser Deskriptor ist unempfindlich gegenüber Bildrotationen. -3. **Abgleich der Schlüsselpunkte 🔗:** Die Anwendung gleicht die Schlüsselpunkte zwischen dem hochgeladenen Bild und jedem Datenbankbild ab. Der Prozess umfasst das Finden von Schlüsselpunkten im Datenbankbild, die ähnliche Deskriptoren wie das hochgeladene Bild haben. -4. **Bewertung der Übereinstimmungen 🏅:** Je mehr Schlüsselpunkte zwischen zwei Bildern übereinstimmen, desto höher ist der Ähnlichkeitswert auf der Grundlage von ORB. Dieser Wert spiegelt wider, wie viele charakteristische Merkmale die Bilder teilen. - -Zusammen bieten die Methoden **SSIM** und **ORB** eine robuste und genaue Möglichkeit, ähnliche Bilder zum hochgeladenen Bild zu finden und zu vergleichen. diff --git a/fastAPI_app/attached_assets/docs/readme/README_JP.md b/fastAPI_app/attached_assets/docs/readme/README_JP.md deleted file mode 100644 index e40137b..0000000 --- a/fastAPI_app/attached_assets/docs/readme/README_JP.md +++ /dev/null @@ -1,202 +0,0 @@ -![Logo](https://github.com/Solrikk/PicTrace/blob/main/assets/OpenCV%20-%20result/bee.jpg) - -
-

- English | - Russian | - German | - ⭐Japanese⭐ | - Korean | - Chinese -

-
- ------------------ - -# PicTrace 🔍 - -_**PicTrace**_ は、高速かつ正確な画像検索のために、_**OpenCV**_ を使用したコンピュータビジョン、_**TensorFlow**_ と _**ResNet50モデル**_ を用いた深層学習、_**aiohttp**_ を使った非同期処理、および _**FastAPI**_ ウェブフレームワークを活用した非常に効率的な画像マッチングプラットフォームです。PicTraceは、ユーザーが画像を直接アップロードしたり、URLを提供することで、膨大なデータベースを迅速にスキャンして類似画像を見つけることを可能にします。非同期処理によりスムーズで迅速なビジュアル検索が実現し、ユーザーエクスペリエンスが向上します。 - -# オンラインデモ: - -_**PicTrace**_ がリアルタイムでどのように動作するか気になりますか? - -オンラインデモを試して、画像マッチングプラットフォームの機能を確認してください。 - -[オンラインデモ](https://PicTrace.replit.app) - **ぜひ試してみてください!** - -![PicTrace Demo](https://github.com/Solrikk/PicTrace/blob/main/assets/gif/Pictrace.gif) - -## 目次: -1. [機能 ⚡](#機能-⚡) -2. [PicTraceの始め方 🚀](#pictraceの始め方-🚀) - - [前提条件](#前提条件) - - [PicTraceのセットアップ手順](#pictraceのセットアップ手順) - - [アプリケーションの起動方法](#アプリケーションの起動方法) -3. [結果: 👨‍💻](#結果-👨‍💻) -4. [例: 📋](#例-📋) - - [コメント付きのコード](#コメント付きのコード) -5. [PicTraceでのSSIMの動作](#pictraceでのssimの動作) -6. [PicTraceでのORBの動作](#pictraceでのorbの動作) -7. [SSIMとORBの組み合わせ](#ssimとorbの組み合わせ) -8. [OpenCV(オープンソースコンピュータビジョンライブラリ)🌐](#opencvオープンソースコンピュータビジョンライブラリ-🌐) -9. [ニューラルネットワークモデル(ResNet50)🧠](#ニューラルネットワークモデル-ResNet50-🧠) -10. [類似画像の最終選択](#類似画像の最終選択) - -## 機能: ⚡ -- **_複数の技術をサポート_** 💼 - - これらの強力なライブラリを備えた _**Python**_: - - **`FastAPI:`** ウェブアプリケーションの作成とHTTPリクエストの処理に最適で、高性能と非同期操作のサポートで知られています。 [詳細](https://fastapi.tiangolo.com/) - - **`aiohttp:`** URLを介して画像をダウンロードするなどの非同期HTTPリクエストの処理に最適で、アプリの速度と効率を向上させます。 [詳細](https://docs.aiohttp.org/en/stable/index.html) - - **`OpenCV (cv2):`** 画像の読み込み、サイズ変更、比較などの高度な画像処理に使用される堅牢なコンピュータビジョンライブラリで、画像関連のタスクに欠かせません。 [詳細](https://docs.opencv.org/) - - **`numpy:`** 多次元配列の操作のための多用途なライブラリで、効率的な画像処理のためにOpenCVと一緒に使用されることが多いです。 [詳細](https://numpy.org/doc/) - - **`scikit-image:`** 特にこのライブラリの `structural_similarity`(SSIM)関数は画像の類似性を比較するために使用され、アプリケーションの画像マッチング精度を向上させます。 [詳細](https://scikit-image.org/docs/stable/auto_examples/transform/plot_ssim.html) - - **`hashlib:`** 各画像に対して一意のハッシュを生成し、すべての画像が一意に識別され効率的に管理されることを保証します。 [詳細](https://docs.python.org/3/library/hashlib.html) - -- **_複数のインデックスをサポート_** 🗂️ - - - **`画像ハッシュ:`** 画像の一意のハッシュを生成して一意の識別と効率的な管理を確保します。 - - **`ResNet50による特徴抽出:`** 画像から堅牢な特徴表現を抽出するためにResNet50モデルを利用します。 - - **`コサイン類似度:`** 画像から抽出された特徴ベクトルを使用して画像間の類似性を測定します。 - ------------------ - -## PicTraceの始め方: 🚀 -_PicTraceは開発プロセスを効率化するために設計された強力な画像トレースと比較ツールです。これらの手順に従って環境を設定し、アプリケーションを正常に起動してください。_ - -### 前提条件 -PicTraceを使用するには、次のコンポーネントがインストールされていることを確認してください: - -- **Python 3.8以上:** PicTraceはPythonで構築されています。最新バージョンのPythonは[公式ウェブサイト](https://www.python.org/downloads/)からダウンロードできます。 -- **pip:** Pythonのパッケージインストーラーで、Python 3.4以降にプリインストールされています。必要な依存関係をインストールするためにpipを使用します。 -- **Git:** PicTraceリポジトリをクローンするために必要です。システムにGitがインストールされていない場合は、[Gitの公式サイト](https://git-scm.com/downloads)のインストール手順に従ってください。 - -### PicTraceのセットアップ手順: -1. **リポジトリをクローン** - -_まず、PicTraceのソースコードをローカルマシンに取得します。次のコマンドを使用してGitHubからリポジトリをクローンします:_ - -```git clone https://github.com/solrikk/PicTrace.git``` - -2. **_仮想環境の設定:_** ✔️ - -_仮想環境は、プロジェクトの依存関係をグローバルなPython設定から分離し、異なるプロジェクト間でのバージョンの競合を防ぐために重要です。仮想環境を作成してアクティブ化するために、以下のコマンドを実行します:_ - -仮想環境を作成してアクティブ化するには、以下のコマンドを使用します: - -```bash -python -m venv venv -# Windows -venv\Scripts\activate -# Linux および MacOS -source venv/bin/activate -``` - -3. **_依存関係のインストール:_** ✔️ - - _This command reads the `requirements.txt` file and installs all listed packages, ensuring that PicTrace has all the necessary components to run smoothly._ -```bash -pip install -r requirements.txt -``` -### _Launching the application:_ -1. **_Start the server:_** -```bash -python app.py -``` -`After starting the server, the application will be available at http://localhost:5000 .` - ------------------ - -## 結果: 👨‍💻 -_詳細な情報やノイズ、歪みの存在が考えられる複雑な画像に対しては、**20%** 以上の類似性でも重要な共通特徴が存在することを示している可能性があります。そのような場合、タスクの複雑さやアルゴリズムの制限により、類似性の割合が低くなることが予想されます。_ -|画像 1 vs 画像 2|類似度|画像| -|:-:|:-:|:-:| -||**27.12%**|| -||**25.44%**|| -||**44.16%**|| - -## 例: 📋 -(**_コメント付きコード_**) - -```Python -async def find_similar_images(file_path): - # 画像に関する情報を含むデータベースからデータをロードする。 - db_data = load_db() - # 指定されたファイルパスからターゲット画像を読み取る。 - target_image = cv2.imread(file_path) - # 事前にトレーニングされたモデルを使用してターゲット画像から特徴を抽出する。 - target_features = extract_features(target_image) - # HTTPリクエストを処理するためのaiohttp非同期セッションを作成する。 - async with aiohttp.ClientSession() as session: - # データベースの各画像に対してcompare_images関数の非同期タスクを作成する。 - tasks = [ - compare_images(session, entry, target_features) for entry in db_data - if "url" in entry # 画像URLを含むエントリのみを比較する。 - ] - # すべてのタスクが完了するのを待って結果を収集する。 - results = await asyncio.gather(*tasks) - # 類似度スコアが0より大きい結果のみを保持するようにフィルタリングする。 - valid_results = filter(lambda x: x[0] > 0, results) - # フィルタリングされた結果を類似度スコアの降順でソートし、上位5件を取得する。 - sorted_results = sorted(valid_results, key=lambda x: x[0], reverse=True)[:5] - # 類似画像のURLを格納するリストを作成する。 - similar_images = [] - for result in sorted_results: - if result[1]: - similar_images.append(result[1]) - # 類似画像のURLリストを返す。 - return similar_images -``` - ------------------ - -## _OpenCV (オープンソースコンピュータビジョンライブラリ) 🌐:_ - - - -**OpenCV** は画像およびビデオ処理のための強力なコンピュータビジョンライブラリです。機械ビジョン、画像認識、ビデオ分析などに関連する分野で広く使用されています。ライブラリには、オブジェクト検出、顔認識、運動追跡、ビデオ操作などの画像分析用の広範なアルゴリズムが含まれています。 - -**OpenCV** の主な機能は次のとおりです: -1. **画像の読み込みと保存 🖼️**: さまざまな画像フォーマットをサポートし、画像の読み込み、サイズ変更、および保存を簡単に行うことができ、大規模なデータセットを扱う上で重要です。 -2. **画像処理 ✨**: 画像のフィルタリング、グレースケールへの変換、サイズ変更、回転、およびその他の操作のための機能を提供し、分析前の画像の前処理に重要です。 -3. **オブジェクト検出 🔍**: エッジ、コーナー、およびその他のポイントを検出するアルゴリズムを含み、フレーム内の特定のオブジェクトの識別および追跡に役立ちます。 -4. **オブジェクト認識 👁️**: 顔、ジェスチャー、および画像およびビデオ内のその他のオブジェクトを認識するためのツールを提供し、多くのコンピュータビジョンアプリケーションに重要です。 - -## ニューラルネットワークモデル (ResNet50) 🧠: - -![image](https://github.com/Solrikk/PicTrace/assets/70236693/d47bd022-8a05-48fc-b6c8-147ec99520ce) - -**ResNet50** (Residual Network) モデルは、画像分類および特徴抽出タスクのための最も人気があり強力なディープラーニングアーキテクチャの1つです。あなたのニューラルネットワークモデル **ResNet50** は次の利点を提供します: - -1. **ディープレジデュアルネットワーク 🏗️**: ディープニューラルネットワークのトレーニングを容易にし、非常に深いアーキテクチャを構築できるようにし、勾配消失のリスクを排除します。 -2. **事前トレーニング済みの重み 🎓**: モデルはImageNetデータセットで事前トレーニングされた重みを持ち、トレーニングの速度を大幅に向上させ、画像分類タスクの精度を向上させます。 -3. **特徴抽出 🔑**: モデルは画像から特徴を抽出するために使用でき、認知データ分析および機械学習に関連するタスクに役立ちます。 -4. **柔軟性 🚀**: モデルは、分類タスクと画像特徴の抽出および比較タスクの両方に使用でき、あなたのアプリケーションに適しています。 - -**OpenCV** と **ResNet50** を組み合わせることで、自動オブジェクト認識や画像分類などの複雑なタスクを実行できる強力なコンピュータビジョンアプリケーションを作成できます。 - ---- - -コンピュータビジョンで使用されるORBメソッドは、オブジェクト認識、画像マッチング、およびトラッキングに関連するタスクで特に人気があります。このメソッドは、画像上のキーポイントを迅速に見つけ、それらを効率的に比較できる方法で記述することに重点を置いています。 - - - -1. **向き付きFAST (加速セグメントテストからの特徴)🚀:** このコンポーネントは、画像上の関心点(またはキーポイント)を検出する役割を担います。それは、周囲と比較して際立つコーナーやエッジを迅速に識別します。このようにして、画像の意味のあるまたは独特のセクションを特定することができます。 -2. **回転BRIEF (バイナリロバスト独立基本特徴) 🔄:** キーポイントが検出された後、比較のためにキーポイントの記述を生成する必要があります。BRIEFはキーポイントの短いバイナリ記述を生成しますが、画像の回転に対して耐性がありません。ここで「回転」の部分が重要です - ORBは画像が回転しても安定した記述を提供します。 - -これらの2つのアプローチを組み合わせることで、ORBは、視点、スケール、照明の変化にもかかわらず、画像を迅速かつ効率的に一致させる方法を提供します。 - -PicTraceは、アップロードされた画像に似た画像を見つけるために、**SSIM** と **ORB** の両方のメソッドを使用します。ここでは、それぞれの方法があなたのアプリケーションのコンテキストでどのように機能し、類似画像の検索にどのように貢献するかについて簡単に説明します: - -## PicTraceでのSSIMの機能: -1. **画像のリサイズ 🔧:** アップロードされた画像とデータベース内の各画像を比較する際、両方の画像は同じ寸法(256x256ピクセル)にリサイズされます。これにより、比較が標準化され、より効率的になります。 -2. **グレースケールへの変換 🌑:** 両方の画像はグレースケールに変換されます。これにより、色の違いに気を取られることなく、構造と光の強度に集中して比較が行えます。 -3. **構造的類似性の比較 🧩:** SSIMメソッドはこれらのグレースケール画像を比較し、構造的な類似性を評価します。高いスコアは、画像が構造的に類似していることを意味します。 - -## PicTraceでのORBの機能: -1. **キーポイントの検出 📍:** ORBはまず、アップロードされた画像と各データベース画像の両方にキーポイントを特定します。これらのポイントは簡単に識別でき、画像間で比較が可能です。 -2. **キーポイントの記述 🖊️:** 検出された各キーポイントについて、ORBはそのキーポイントの特性を要約する一意の記述子を生成します。この記述子は画像の回転にも不変です。 -3. **キーポイントのマッチング 🔗:** アプリケーションはアップロードされた画像と各データベース画像の間でキーポイントをマッチングします。このプロセスには、アップロードされた画像の記述子と類似した記述子を持つデータベース画像のキーポイントを見つけることが含まれます。 -4. **マッチのスコア付け 🏅:** 2枚の画像間でマッチするキーポイントが多いほど、ORBに基づく類似度スコアは高くなります。このスコアは、画像が共有する特色の数を反映しています。 - -**SSIM** と **ORB** の両方のメソッドを組み合わせることで、アップロードされた画像に似た画像を見つけて比較するための強力で正確な方法を提供します。 diff --git a/fastAPI_app/attached_assets/docs/readme/README_KR.md b/fastAPI_app/attached_assets/docs/readme/README_KR.md deleted file mode 100644 index 28be3e2..0000000 --- a/fastAPI_app/attached_assets/docs/readme/README_KR.md +++ /dev/null @@ -1,202 +0,0 @@ -![Logo](https://github.com/Solrikk/PicTrace/blob/main/assets/OpenCV%20-%20result/bee.jpg) - -
-

- English | - Russian | - German | - Japanese | - ⭐Korean⭐ | - Chinese -

-
- ------------------ - -# PicTrace 🔍 - -_**PicTrace**_는 _**OpenCV**_를 사용한 컴퓨터 비전, _**TensorFlow**_ 및 _**ResNet50 모델**_을 사용한 딥러닝, _**aiohttp**_를 사용한 비동기 처리, 빠르고 정확한 이미지 검색을 위한 _**FastAPI**_ 웹 프레임워크를 활용한 고성능 이미지 매칭 플랫폼입니다. PicTrace는 사용자가 이미지를 직접 업로드하거나 URL을 제공할 수 있게 하며, 방대한 데이터베이스를 신속하게 스캔하여 유사한 이미지를 찾습니다. 비동기 처리는 매끄럽고 빠른 비주얼 검색을 보장하여 사용자 경험을 향상시킵니다. - -# 온라인 데모: - -_PicTrace_가 실시간으로 어떻게 작동하는지 궁금하신가요? - -온라인 데모를 확인하고 이미지 매칭 플랫폼의 기능을 직접 체험해 보세요. - -[온라인 데모](https://PicTrace.replit.app) - **직접 시도해 보세요!** - -![PicTrace Demo](https://github.com/Solrikk/PicTrace/blob/main/assets/gif/Pictrace.gif) - -## 목차: -1. [기능 ⚡](#features-⚡) -2. [PicTrace 시작하기 🚀](#getting-started-with-pictrace-🚀) - - [필수 조건](#prerequisites) - - [PicTrace 설정 단계](#steps-to-set-up-pictrace) - - [애플리케이션 실행](#launching-the-application) -3. [결과: 👨‍💻](#results-👨‍💻) -4. [예제: 📋](#examples-📋) - - [주석이 포함된 코드](#code-with-comments) -5. [PicTrace에서 SSIM이 작동하는 방법](#how-ssim-works-in-pictrace) -6. [PicTrace에서 ORB가 작동하는 방법](#how-orb-works-in-pictrace) -7. [SSIM 및 ORB 결합](#combining-ssim-and-orb) -8. [OpenCV (오픈 소스 컴퓨터 비전 라이브러리) 🌐](#opencv-open-source-computer-vision-library-🌐) -9. [신경망 모델 (ResNet50) 🧠](#neural-network-model-resnet50-🧠) -10. [유사한 이미지의 최종 선택](#final-selection-of-similar-images) - -## 기능: ⚡ -- **_여러 기술 지원_** 💼 - - _**Python**_과 함께 사용하는 강력한 라이브러리: - - **`FastAPI:`** 웹 애플리케이션 생성과 HTTP 요청 처리를 위한 이상적인 선택. FastAPI는 고성능과 비동기 작업 지원으로 유명합니다. [자세히 보기](https://fastapi.tiangolo.com/) - - **`aiohttp:`** URL을 통해 이미지를 다운로드하는 등 비동기 HTTP 요청 처리를 완벽하게 지원하여 애플리케이션을 더 빠르고 효율적으로 만듭니다. [자세히 보기](https://docs.aiohttp.org/en/stable/index.html) - - **`OpenCV (cv2):`** 고급 이미지 처리를 위한 강력한 컴퓨터 비전 라이브러리로, 이미지 로드, 리사이징 및 비교 등을 포함한 이미지 관련 작업에 중요한 구성 요소입니다. [자세히 보기](https://docs.opencv.org/) - - **`numpy:`** 다차원 배열 작업을 위한 다재다능한 라이브러리로, OpenCV와 함께 사용하여 효율적인 이미지 처리를 수행합니다. [자세히 보기](https://numpy.org/doc/) - - **`scikit-image:`** 특히, 이 라이브러리의 `structural_similarity` (SSIM) 함수는 이미지 유사성을 비교하는 데 사용되어 애플리케이션의 정확성을 향상시킵니다. [자세히 보기](https://scikit-image.org/docs/stable/auto_examples/transform/plot_ssim.html) - - **`hashlib:`** 각 이미지에 고유한 해시를 생성하여 모든 이미지를 고유하게 식별하고 효율적으로 관리할 수 있습니다. [자세히 보기](https://docs.python.org/3/library/hashlib.html) - -- **_다중 인덱스 지원_** 🗂️ - - - **`이미지 해싱:`** 이미지를 고유하게 식별하고 효율적으로 관리하기 위해 고유한 해시를 생성합니다. - - **`ResNet50을 사용한 특징 추출:`** ResNet50 모델을 사용하여 이미지에서 강력한 특징 표현을 추출합니다. - - **`코사인 유사도:`** 이미지에서 추출한 특징 벡터를 기반으로 코사인 유사도를 사용하여 이미지 간 유사성을 측정합니다. - ------------------ - -## PicTrace 시작하기: 🚀 -_PicTrace는 개발 프로세스를 간소화하도록 설계된 강력한 이미지 추적 및 비교 도구입니다. 다음 단계를 수행하여 환경을 설정하고 애플리케이션을 성공적으로 실행하십시오._ - -### 필수 조건 -PicTrace를 사용하려면 다음 구성 요소가 설치되어 있는지 확인하세요: - -- **Python 3.8 이상:** PicTrace는 Python으로 구축되었습니다. [공식 웹사이트](https://www.python.org/downloads/)에서 최신 버전의 Python을 다운로드할 수 있습니다. -- **pip:** Python 패키지 설치 관리자이며, Python 3.4 이상에 기본 설치되어 있습니다. 필요한 종속성을 설치하는 데 pip를 사용합니다. -- **Git:** PicTrace 저장소를 복제하는 데 필요합니다. 시스템에 Git이 설치되어 있지 않다면 [Git의 공식 사이트](https://git-scm.com/downloads)에서 설치 지침을 따르십시오. - -### PicTrace 설정 단계: -1. **저장소 복제** - -_먼저, 로컬 머신에 PicTrace 소스 코드를 복사합니다. GitHub에서 저장소를 복제하려면 다음 명령을 사용하십시오:_ - -```git clone https://github.com/solrikk/PicTrace.git``` - -2. **_가상 환경 설정:_** ✔️ - -_가상 환경은 프로젝트 종속성을 글로벌 Python 설정에서 분리하여, 다양한 프로젝트 간 버전 충돌을 방지하는 데 중요합니다. 가상 환경을 만들고 활성화하려면 다음 명령을 실행하십시오:_ - -가상 환경을 만들고 활성화하려면 다음 명령을 따르십시오: - -```bash -python -m venv venv -# Windows -venv\Scripts\activate -# Linux 및 MacOS -source venv/bin/activate -``` - -3. **_Install dependencies:_** ✔️ - - _This command reads the `requirements.txt` file and installs all listed packages, ensuring that PicTrace has all the necessary components to run smoothly._ -```bash -pip install -r requirements.txt -``` -### _Launching the application:_ -1. **_Start the server:_** -```bash -python app.py -``` -`After starting the server, the application will be available at http://localhost:5000 .` - ------------------ - -## 결과: 👨‍💻 -_상세한 정보와 노이즈 또는 왜곡이 있을 가능성이 있는 복잡한 이미지에 대해서도, 유사도가 **20%** 이상이라면 중요한 공통 요소가 있음을 나타낼 수 있습니다. 이러한 경우, 작업의 복잡성과 알고리즘의 한계로 인해 낮은 유사도 비율이 예상될 수 있습니다._ -|이미지 1 vs 이미지 2|유사도|이미지| -|:-:|:-:|:-:| -||**27.12%**|| -||**25.44%**|| -||**44.16%**|| - -## 예제: 📋 -(**_주석이 포함된 코드_**) - -```Python -async def find_similar_images(file_path): - # 이미지에 대한 정보를 포함하는 데이터베이스에서 데이터를 로드합니다. - db_data = load_db() - # 지정된 파일 경로에서 대상 이미지를 읽어들입니다. - target_image = cv2.imread(file_path) - # 미리 학습된 모델을 사용하여 대상 이미지에서 특징을 추출합니다. - target_features = extract_features(target_image) - # HTTP 요청 처리를 위한 aiohttp 비동기 세션을 만듭니다. - async with aiohttp.ClientSession() as session: - # 데이터베이스의 각 이미지에 대해 compare_images 함수에 대한 비동기 작업을 만듭니다. - tasks = [ - compare_images(session, entry, target_features) for entry in db_data - if "url" in entry # 이미지 URL을 포함하는 항목에만 비교를 수행합니다. - ] - # 모든 작업이 완료되기를 기다리고 결과를 모읍니다. - results = await asyncio.gather(*tasks) - # 유사도 점수가 0보다 큰 결과만 유지하여 필터링합니다. - valid_results = filter(lambda x: x[0] > 0, results) - # 유효한 결과를 유사도 점수 순으로 내림차순 정렬하고 상위 5개를 선택합니다. - sorted_results = sorted(valid_results, key=lambda x: x[0], reverse=True)[:5] - # 유사한 이미지의 URL을 저장할 리스트를 만듭니다. - similar_images = [] - for result in sorted_results: - if result[1]: - similar_images.append(result[1]) - # 유사한 이미지의 URL 리스트를 반환합니다. - return similar_images -``` - ------------------ - -## _OpenCV (오픈 소스 컴퓨터 비전 라이브러리) 🌐:_ - - - -**OpenCV**는 이미지 및 비디오 처리를 위한 강력한 컴퓨터 비전 라이브러리입니다. 기계 비전, 이미지 인식, 비디오 분석 등과 관련된 분야에서 널리 사용됩니다. 라이브러리는 이미지 분석을 위한 다양한 알고리즘을 포함하고 있으며, 예를 들어 객체 검출, 얼굴 인식, 모션 추적, 비디오 조작 등이 있습니다. - -**OpenCV**의 주요 기능은 다음과 같습니다: -1. **이미지 로드 및 저장 🖼️**: 다양한 이미지 형식을 지원하며, 이미지 로드, 크기 조정, 저장을 쉽게 할 수 있어 대용량 데이터셋을 처리하는 데 중요합니다. -2. **이미지 처리 ✨**: 이미지 필터링, 그레이스케일 변환, 크기 조정, 회전 및 기타 조작을 위한 함수를 제공합니다. 이는 분석 전에 이미지를 전처리하는 데 중요합니다. -3. **객체 검출 🔍**: 테두리, 모서리 및 기타 주요 포인트를 검출하는 알고리즘을 포함하여 특정 객체를 식별하고 추적하는 데 도움을 줍니다. -4. **객체 인식 👁️**: 얼굴, 제스처 및 기타 객체를 이미지 및 비디오에서 인식하는 도구를 제공하며, 이는 많은 컴퓨터 비전 응용 프로그램에 중요합니다. - -## 신경망 모델 (ResNet50) 🧠: - -![image](https://github.com/Solrikk/PicTrace/assets/70236693/d47bd022-8a05-48fc-b6c8-147ec99520ce) - -**ResNet50** (Residual Network) 모델은 이미지 분류 및 특징 추출 작업을 위한 가장 인기 있고 강력한 딥러닝 아키텍처 중 하나입니다. ResNet50 모델은 다음과 같은 장점을 제공합니다: - -1. **딥 레지듀얼 네트워크 🏗️**: 레지듀얼 네트워크를 사용하여 딥 뉴럴 네트워크의 트레이닝을 용이하게 하여 매우 깊은 아키텍처를 구축할 수 있게 합니다. -2. **사전 학습된 가중치 🎓**: 모델은 ImageNet 데이터셋에서 사전 학습된 가중치를 제공하여 트레이닝 속도를 대폭 향상시키고 이미지 분류 작업의 정확성을 높입니다. -3. **특징 추출 🔑**: 모델을 사용하여 이미지에서 특징을 추출할 수 있으며, 이는 인지 데이터 분석 및 머신러닝과 관련된 작업에 유용합니다. -4. **유연성 🚀**: 모델은 분류 작업과 이미지 특징의 추출 및 비교 작업 모두에 사용할 수 있으며, 이는 애플리케이션에 적합합니다. - -**OpenCV**와 **ResNet50**을 함께 사용하면 시각 데이터를 분석하고 자동 객체 인식 및 이미지 분류와 같은 복잡한 작업을 수행할 수 있는 강력한 컴퓨터 비전 응용 프로그램을 만들 수 있습니다. - ---- - -컴퓨터 비전에서 사용되는 ORB(Oriented FAST and Rotated BRIEF) 방법은 객체 인식, 이미지 매칭 및 추적과 관련된 작업에 특히 인기가 있습니다. 이 방법은 이미지에서 키포인트를 빠르게 찾고 이러한 키포인트를 효율적으로 비교할 수 있도록 설명하는 데 중점을 둡니다. - - - -1. **Oriented FAST (가속 분할 테스트에서의 특징) 🚀:** 이 구성 요소는 이미지에서 관심 포인트(또는 키포인트)를 감지하는 역할을 합니다. 주변 영역과 비교하여 두드러진 코너나 에지를 빠르게 식별합니다. 이 방식으로 이미지의 의미가 있거나 고유한 섹션을 식별할 수 있습니다. -2. **Rotated BRIEF (바이너리 강건 독립 기본 특징) 🔄:** 키포인트가 발견된 후, 다른 이미지의 키포인트와 비교할 수 있도록 각 키포인트에 대한 설명을 생성해야 합니다. BRIEF는 키포인트의 간단한 이진 설명을 생성하지만, 이미지 회전에 대한 내성이 없습니다. 이는 "회전" 부분이 필요한 이유입니다 - ORB는 이미지가 회전해도 안정적으로 포인트를 설명할 수 있도록 추가 기능을 제공합니다. - -이 두 가지 접근 방식을 결합하여 ORB는 시야각, 스케일 또는 조명의 변화에도 불구하고 이미지를 빠르고 효율적으로 일치시키는 방법을 제공합니다. - -PicTrace는 업로드된 이미지와 유사한 이미지를 찾기 위해 **SSIM**과 **ORB** 방법을 모두 사용합니다. 여기에서는 각 방법이 애플리케이션의 맥락에서 어떻게 작동하며 유사한 이미지를 찾는 데 어떻게 기여하는지에 대해 간단히 설명합니다: - -## PicTrace에서 SSIM이 작동하는 방법: -1. **이미지 크기 조정 🔧:** 업로드된 이미지와 데이터베이스의 각 이미지를 비교할 때, 두 이미지 모두 동일한 크기(256x256 픽셀)로 조정됩니다. 이는 비교를 표준화하여 더 공정하고 효율적으로 만듭니다. -2. **그레이스케일로 변환 🌑:** 두 이미지는 그레이스케일로 변환됩니다. 이는 색상 차이에 방해받지 않고 구조와 빛의 강도에 중점을 두어 비교를 단순화합니다. -3. **구조적 유사성 비교 🧩:** SSIM 방법은 이러한 그레이스케일 이미지를 비교하여 구조적 유사성을 평가합니다. 높은 점수는 이미지가 구조적으로 유사함을 의미합니다. - -## PicTrace에서 ORB가 작동하는 방법: -1. **키포인트 감지 📍:** ORB는 먼저 업로드된 이미지와 각 데이터베이스 이미지에서 키포인트를 식별합니다. 이러한 포인트는 쉽게 인식 가능하며 이미지 간 비교가 가능합니다. -2. **키포인트 설명 🖊️:** 검출된 각 키포인트에 대해 ORB는 해당 키포인트의 특성을 요약하는 고유한 설명자를 생성합니다. 이 설명자는 이미지 회전에 불변입니다. -3. **키포인트 매칭 🔗:** 애플리케이션은 업로드된 이미지와 각 데이터베이스 이미지 간의 키포인트를 매칭합니다. 이 과정에는 업로드된 이미지의 설명자와 유사한 설명자를 가진 데이터베이스 이미지의 키포인트를 찾는 작업이 포함됩니다. -4. **매칭 점수 평가 🏅:** 두 이미지 간의 매칭 키포인트가 많을수록 ORB 기반 유사도 점수가 높아집니다. 이 점수는 이미지가 공유하는 독특한 특징의 수를 반영합니다. - -**SSIM** 과 **ORB** 방법을 결합하여 업로드된 이미지와 유사한 이미지를 찾고 비교하는 강력하고 정확한 방법을 제공합니다. diff --git a/fastAPI_app/attached_assets/docs/readme/README_RU.md b/fastAPI_app/attached_assets/docs/readme/README_RU.md deleted file mode 100644 index de8fbe1..0000000 --- a/fastAPI_app/attached_assets/docs/readme/README_RU.md +++ /dev/null @@ -1,201 +0,0 @@ -![Logo](https://github.com/Solrikk/PicTrace/blob/main/assets/OpenCV%20-%20result/bee.jpg) - -
-

- English | - ⭐Russian⭐ | - German | - Japanese | - Korean | - Chinese -

-
- ------------------ - -# PicTrace 🔍 - -_**PicTrace**_ - это высокоэффективная платформа для сопоставления изображений, использующая компьютерное зрение с _**OpenCV**_, глубокое обучение с _**TensorFlow**_ и модель _**ResNet50**_, а также асинхронную обработку с _**aiohttp**_ и веб-фреймворк _**FastAPI**_ для быстрого и точного поиска изображений. PicTrace позволяет пользователям загружать изображения напрямую или предоставлять URL-адреса, быстро сканируя обширную базу данных для поиска похожих изображений. Асинхронная обработка обеспечивает плавный и быстрый визуальный поиск, улучшая пользовательский опыт. - -# Онлайн Демо - -Любопытно увидеть, как работает PicTrace в реальном времени? -Изучите мое онлайн-демо и оцените возможности моей платформы сопоставления изображений. - -[Online Demo](https://PicTrace.replit.app) - **Попробуйте и убедитесь сами!** -![PicTrace Demo](https://github.com/Solrikk/PicTrace/blob/main/assets/gif/Pictrace.gif) - -## Оглавление -1. [Функции ⚡](#функции-⚡) -2. [Начало работы с PicTrace 🚀](#начало-работы-с-pictrace-🚀) - - [Необходимые компоненты](#необходимые-компоненты) - - [Шаги по настройке PicTrace](#шаги-по-настройке-pictrace) - - [Запуск приложения](#запуск-приложения) -3. [Результаты: 👨‍💻](#результаты-👨‍💻) -4. [Примеры: 📋](#примеры-📋) - - [Код с комментариями](#код-с-комментариями) -5. [Как работает SSIM в PicTrace](#как-работает-ssim-в-pictrace) -6. [Как работает ORB в PicTrace](#как-работает-orb-в-pictrace) -7. [Комбинирование SSIM и ORB](#комбинирование-ssim-и-orb) -8. [OpenCV (Открытая библиотека компьютерного зрения) 🌐](#opencv-открытая-библиотека-компьютерного-зрения-🌐) -9. [Модель нейронной сети (ResNet50) 🧠](#модель-нейронной-сети-resnet50-🧠) -10. [Окончательный выбор похожих изображений](#окончательный-выбор-похожих-изображений) - -## Функции ⚡ -- **_Поддержка нескольких технологий_** 💼 - - _**Python**_ с этими мощными библиотеками: - - **`FastAPI:`** Идеально подходит для создания веб-приложений и обработки HTTP-запросов, FastAPI известен высокой производительностью и поддержкой асинхронных операций. [Подробнее](https://fastapi.tiangolo.com/) - - **`aiohttp:`** Идеально подходит для обработки асинхронных HTTP-запросов, таких как загрузка изображений по URL, делая ваше приложение быстрее и эффективнее. [Подробнее](https://docs.aiohttp.org/en/stable/index.html) - - **`OpenCV (cv2):`** Мощная библиотека компьютерного зрения, используемая для продвинутой обработки изображений, включая загрузку, изменение размеров и сравнение изображений, что делает её важным компонентом для задач, связанных с изображениями. [Подробнее](https://docs.opencv.org/) - - **`numpy:`** Универсальная библиотека для работы с многомерными массивами, часто используемая вместе с OpenCV для эффективной обработки изображений. [Подробнее](https://numpy.org/doc/) - - **`scikit-image:`** Функция `structural_similarity` (SSIM) из этой библиотеки используется для сравнения сходства изображений, повышая точность вашего приложения в сопоставлении изображений. [Подробнее](https://scikit-image.org/docs/stable/auto_examples/transform/plot_ssim.html) - - **`hashlib:`** Используется для генерации уникальных хешей для каждого изображения, гарантируя, что каждое изображение может быть уникально идентифицировано и эффективно управляемо. [Подробнее](https://docs.python.org/3/library/hashlib.html) - -- **_Поддержка нескольких индексов_** 🗂️ - - - **`Хеширование изображений:`** Генерация уникальных хешей для изображений для обеспечения уникальной идентификации и эффективного управления. - - **`Извлечение признаков с помощью ResNet50:`** Использует модель ResNet50 для извлечения устойчивых признаков из изображений. - - **`Косинусное сходство:`** Измерение сходства между изображениями с использованием косинусного сходства на векторах признаков, извлеченных из изображений. - ------------------ - -## Начало работы с PicTrace 🚀 -_PicTrace - это мощный инструмент для отслеживания и сравнения изображений, разработанный для упрощения вашего процесса разработки. Следуйте этим шагам для настройки вашего окружения и успешного запуска приложения._ - -### Необходимые компоненты -Чтобы работать с PicTrace, убедитесь, что у вас установлены следующие компоненты: - -- **Python 3.8 или выше:** PicTrace разработан на Python. Вы можете скачать последнюю версию Python с [официального сайта](https://www.python.org/downloads/). -- **pip:** Пакетный менеджер для Python, который идет в комплекте с Python 3.4 и выше. Мы будем использовать pip для установки необходимых зависимостей. -- **Git:** Требуется для клонирования репозитория PicTrace. Если Git ещё не установлен на вашем компьютере, следуйте инструкциям по установке на [официальном сайте Git](https://git-scm.com/downloads). - -### Шаги по настройке PicTrace -1. **Клонируйте репозиторий** - -_Сначала получиет копию исходного кода PicTrace на своей локальной машине. Используйте следующие команды для клонирования репозитория с GitHub:_ -```git clone https://github.com/solrikk/PicTrace.git``` - -2. **_Set up a virtual environment:_** ✔️ - -_A virtual environment is crucial for isolating the project dependencies from your global Python setup, preventing version conflicts among different projects. To create and activate a virtual environment, execute the following commands:._ - -To create and activate a virtual environment, follow these commands: - -```bash -python -m venv venv -# Windows -venv\Scripts\activate -# Linux и MacOS -source venv/bin/activate -``` - -3. **_Install dependencies:_** ✔️ - - _This command reads the `requirements.txt` file and installs all listed packages, ensuring that PicTrace has all the necessary components to run smoothly._ -```bash -pip install -r requirements.txt -``` -### _Launching the application:_ -1. **_Start the server:_** -```bash -python app.py -``` -`After starting the server, the application will be available at http://localhost:5000 .` - ------------------ - -## Результаты: 👨‍💻 -_Для сложных изображений с большим количеством деталей и возможным наличием шумов или искажений, даже сходство на уровне **20%** и выше может указывать на наличие значительных общих черт. В таких случаях можно ожидать низкий процент сходства из-за сложности задачи и ограничений алгоритма._ -|Image 1 vs Image 2|Similar|Image| -|:-:|:-:|:-:| -||**27,12%**|| -||**25,44%**|| -||**44,16%**|| - -## Примеры: 📋 -(**_code with comments_**) - -```Python -async def find_similar_images(file_path): - # Загрузка данных из базы данных, содержащей информацию об изображениях. - db_data = load_db() - # Чтение целевого изображения из указанного пути к файлу. - target_image = cv2.imread(file_path) - # Извлечение признаков из целевого изображения с использованием предобученной модели. - target_features = extract_features(target_image) - # Создание асинхронной сессии aiohttp для обработки HTTP-запросов. - async with aiohttp.ClientSession() as session: - # Создание асинхронных задач для функции compare_images для каждого изображения в базе данных. - tasks = [ - compare_images(session, entry, target_features) for entry in db_data - if "url" in entry # Выполнение сравнения только для записей, содержащих URL изображения. - ] - # Ожидание выполнения всех задач и сбор результатов. - results = await asyncio.gather(*tasks) - # Фильтрация результатов, оставляя только те, у которых оценка сходства больше 0. - valid_results = filter(lambda x: x[0] > 0, results) - # Сортировка отфильтрованных результатов по оценке сходства в порядке убывания и выбор топ-5. - sorted_results = sorted(valid_results, key=lambda x: x[0], reverse=True)[:5] - # Создание списка для хранения URL похожих изображений. - similar_images = [] - for result in sorted_results: - if result[1]: - similar_images.append(result[1]) - # Возвращение списка URL похожих изображений. - return similar_images -``` - -## _OpenCV (Открытая библиотека компьютерного зрения) 🌐:_ - - - -**OpenCV** - это мощная библиотека компьютерного зрения, предоставляющая инструменты для обработки изображений и видео. Она широко используется в областях, связанных с машинным зрением, распознаванием изображений, видеоанализом и другими. В библиотеке представлено множество алгоритмов для анализа изображений, таких как обнаружение объектов, распознавание лиц, отслеживание движения, манипуляция видео и многое другое. - -Ключевые особенности **OpenCV**: - -1. **Загрузка и сохранение изображений 🖼️**: Поддерживает различные форматы изображений и позволяет легко загружать, изменять размер и сохранять изображения, что важно для обработки больших наборов данных. -2. **Обработка изображений ✨**: Предоставляет функции для фильтрации изображений, преобразования их в градации серого, изменения размеров, поворота и других манипуляций. Это важно для предварительной обработки изображений перед анализом. -3. **Обнаружение объектов 🔍**: Включает алгоритмы для обнаружения краев, углов и других ключевых точек, что помогает в идентификации и отслеживании конкретных объектов в кадре. -4. **Распознавание объектов 👁️**: Предлагает инструменты для распознавания лиц, жестов и других объектов на изображениях и видео, что важно для многих приложений компьютерного зрения. - -## Модель нейронной сети (ResNet50) 🧠: - -![image](https://github.com/Solrikk/PicTrace/assets/70236693/d47bd022-8a05-48fc-b6c8-147ec99520ce) - -Модель **ResNet50** (Residual Network) - это одна из самых популярных и мощных архитектур глубокого обучения для задач классификации изображений и извлечения признаков. Ваша нейронная сеть **ResNet50** предоставляет следующие преимущества: - -1. **Глубокие резидуальные сети 🏗️**: Использует остаточные сети для упрощения обучения глубоких нейронных сетей, позволяя строить очень глубокие архитектуры без риска исчезновения градиентов. -2. **Предварительно обученные веса 🎓**: Модель поставляется с предварительно обученными весами на наборе данных ImageNet, что может значительно ускорить обучение и улучшить точность в задачах классификации изображений. -3. **Извлечение признаков 🔑**: Модель может использоваться для извлечения признаков из изображений, что полезно для задач, связанных с когнитивным анализом данных и машинным обучением. -4. **Гибкость 🚀**: Модель можно использовать как для классификации, так и для задачи извлечения и сравнения признаков изображений, что подходит для вашего приложения. - -Вместе **OpenCV** и **ResNet50** могут использоваться для создания мощных приложений компьютерного зрения, которые могут анализировать визуальные данные и выполнять сложные задачи, такие как автоматическое распознавание объектов и классификация изображений. - ---- - -Метод ORB, используемый в компьютерном зрении, особенно популярен для задач, связанных с распознаванием объектов, сопоставлением изображений и отслеживанием. Этот метод фокусируется на быстром нахождении ключевых точек на изображениях и описании их таким образом, чтобы можно было эффективно сравнивать изображения. - - - -1. **Ориентированный FAST (Features from Accelerated Segment Test) 🚀:** Этот компонент отвечает за обнаружение интересных точек (или ключевых точек) на изображении. Он быстро идентифицирует углы или края, которые выделяются по сравнению с их окружающими областями, позволяя идентифицировать значимые или уникальные участки изображения. - -2. **Повернутый BRIEF (Binary Robust Independent Elementary Features) 🔄:** После того как ключевые точки были найдены, необходимо создать описание для каждой, чтобы позволить сравнение ключевых точек с других изображений. BRIEF генерирует краткое бинарное описание точек, но ему не хватает устойчивости к вращению изображений. Здесь вступает в действие часть про "поворот" - ORB добавляет возможность устойчиво описывать точки даже при вращении изображений. - -Комбинируя эти два подхода, ORB предоставляет быстрый и эффективный способ сопоставления изображений несмотря на изменения угла обзора, масштаба или освещения. - -PicTrace использует оба метода **SSIM** и **ORB** для поиска изображений, похожих на загруженное изображение. Вот упрощенное объяснение того, как каждый метод работает в контексте вашего приложения и способствует нахождению похожих изображений: - -## Как работает SSIM в PicTrace: - -1. **Изменение размера изображений 🔧:** При сравнении загруженного изображения с каждым изображением в базе данных оба изображения изменяются до одинаковых размеров (256x256 пикселей). Это стандартизирует сравнение, делая его справедливым и более эффективным. -2. **Преобразование в градации серого 🌑:** Оба изображения преобразуются в оттенки серого. Это упрощает сравнение, сосредоточивая внимание на структуре и интенсивности света, а не отвлекаясь на цветовые различия. -3. **Сравнение структурного сходства 🧩:** Метод SSIM затем сравнивает эти черно-белые изображения для оценки их структурного сходства. Высокий балл означает, что изображения структурно похожи. - -## Как работает ORB в PicTrace: - -1. **Обнаружение ключевых точек 📍:** ORB сначала идентифицирует ключевые точки как на загруженном изображении, так и на каждом изображении в базе данных. Эти точки легко узнаваемы и могут быть сопоставлены между изображениями. -2. **Описание ключевых точек 🖊️:** Для каждой найденной ключевой точки ORB генерирует уникальный дескриптор, который резюмирует особенности ключевой точки. Этот дескриптор инвариантен к поворотам изображения. -3. **Сопоставление ключевых точек 🔗:** Приложение сопоставляет ключевые точки между загруженным изображением и каждым изображением из базы данных. Процесс включает нахождение ключевых точек в изображении из базы данных, которые имеют похожие дескрипторы с загруженным изображением. -4. **Оценка сопоставлений 🏅:** Чем больше ключевых точек совпадает между двумя изображениями, тем выше оценка сходства на основе ORB. Эта оценка отражает, сколько характерных особенностей изображения разделяют друг с другом. - -Вместе методы **SSIM** и **ORB** предоставляют надежный и точный способ нахождения и сравнения изображений, похожих на загруженное изображение. diff --git a/fastAPI_app/attached_assets/static/scripts.js b/fastAPI_app/attached_assets/static/scripts.js deleted file mode 100644 index d515277..0000000 --- a/fastAPI_app/attached_assets/static/scripts.js +++ /dev/null @@ -1,53 +0,0 @@ -document.addEventListener('DOMContentLoaded', function() { - const form = document.getElementById('upload-form'); - const fileInput = document.getElementById('file-input'); - const loadingElement = document.getElementById('loading'); - const resultsDiv = document.getElementById('results'); - - form.addEventListener('submit', async function(event) { - event.preventDefault(); - const file = fileInput.files[0]; - const formData = new FormData(); - formData.append('file', file); - loadingElement.style.display = 'block'; - - try { - const response = await fetch('/find_similar/', { - method: 'POST', - body: formData - }); - if (!response.ok) { - throw new Error('Network response was not ok'); - } - const data = await response.json(); - displayResults(data); - } catch (error) { - console.error("Error uploading file: ", error); - } finally { - loadingElement.style.display = 'none'; - } - }); - - function displayResults(data) { - resultsDiv.innerHTML = ` -

Uploaded Image:

-
- Uploaded Image -
-

Similar Images:

-
- `; - const grid = resultsDiv.querySelector('.similar-images-grid'); - if (data.similar_images.length === 0) { - grid.innerHTML = '

No similar images found.

'; - } else { - data.similar_images.forEach(function(image_url) { - const imgElement = document.createElement('img'); - imgElement.src = `/uploads/${encodeURIComponent(image_url)}`; - imgElement.alt = "Similar Image"; - imgElement.classList.add('similar-image'); - grid.appendChild(imgElement); - }); - } - } -}); diff --git a/fastAPI_app/attached_assets/static/styles.css b/fastAPI_app/attached_assets/static/styles.css deleted file mode 100644 index ca0f82d..0000000 --- a/fastAPI_app/attached_assets/static/styles.css +++ /dev/null @@ -1,166 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@100&display=swap'); - -body, -html { - margin: 0; - padding: 0; - height: 100%; - display: flex; - justify-content: center; - align-items: center; - font-family: 'Montserrat', sans-serif; - display: grid; - place-content: center; - background-color: #39373e; -} - -.canvas { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -.container { - display: flex; - flex-direction: column; - align-items: center; - padding: 20px; - border-radius: 10px; - background: #ffffff; - box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1); - max-width: 800px; - width: 100%; - z-index: 1; -} - -h1, -p { - color: black; - margin-top: 15px; - text-align: center; - font-weight: bold; -} - -p { - font-size: 18px; -} - -form { - display: flex; - flex-direction: column; - align-items: center; - margin-top: 20px; -} - -input[type="file"], -button { - margin-bottom: 15px; - padding: 10px; - border-radius: 5px; - border: 1px solid #6a5acd; - font-size: 14px; - outline: none; - transition: border-color 0.3s ease, transform 0.2s; - width: 100%; - box-sizing: border-box; -} - -input[type="file"]:hover, -input[type="file"]:focus, -button:hover, -button:focus { - border-color: #483d8b; - transform: scale(1.05); -} - -button { - cursor: pointer; - background-color: blueviolet; - color: whitesmoke; - border: none; - transition: background-color 0.3s ease, transform 0.3s ease; - font-size: 18px; - width: 200px; -} - -button:hover { - background-color: darkviolet; - transform: translateY(-2px); -} - -#loading { - display: none; - margin-top: 10px; - font-size: 16px; - color: #000000; - font-weight: bold; -} - -#results { - margin-top: 20px; - text-align: center; -} - -#results .image-container { - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: 15px; - padding: 15px; -} - -#results img.uploaded-image, -#results img.similar-image { - max-width: 200px; - max-height: 200px; - border-radius: 10px; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); - margin-bottom: 10px; -} - -#contactInfo { - margin-top: 20px; - font-size: 14px; - color: whitesmoke; -} - -.header { - width: 100%; - background-color: #333; - padding: 20px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - position: fixed; - top: 0; - left: 0; - z-index: 1000; -} - -.user-panel { - display: flex; - justify-content: center; - gap: 20px; -} - -.user-panel a { - color: white; - text-decoration: none; - padding: 10px 15px; - border-radius: 4px; - transition: background-color 0.3s, color 0.3s; - font-size: 16px; -} - -.user-panel a:hover { - background-color: #444; -} - -canvas#neuro { - position: fixed; - top: 0; - left: 0; - width: 100%; - pointer-events: none; - opacity: .95; -}