My tasks

viết doc về cái repository đã chạy ( framework deploy web là gì, cách thức lưu dữ liệu như nào, nói chung là người hiểu rõ nhất về nó ), các ae còn lại phải git clone và chạy lại được nó.

Link repo: HERE

Đi kèm với giới thiệu repo tại đây
Tên:
Mục đích:
Công nghệ sử dụng:

Mục đích của repository

Repository này chứa mã nguồn của một ứng dụng web sử dụng Flask để triển khai và cung cấp các chức năng tìm kiếm hình ảnh dựa trên văn bản và hình ảnh.
Mang lại cái nhìn bức tranh tổng quát về những gì sắp tới mình sẽ làm phát triển repo lên thành một hướng mới.
Mục tiêu sau cùng là có báo.

Input & Output

  • Input: Đưa vào câu prompt và file
  • Output: Các ảnh có độ tương đồng lớn nhất với câu prompt

Những chức năng chính của ứng dụng:

  • Hiển thị hình ảnh dạng thumbnail.
  • Tìm kiếm hình ảnh dựa trên hình ảnh đầu vào.
  • Tìm kiếm hình ảnh dựa trên văn bản đầu vào.

Các framework sử dụng

  • Framework deploy web: Flask

Các công nghệ và thư viện liên quan:

  • OpenCV: Thư viện xử lý ảnh.
  • FAISS: Thư viện tìm kiếm vector hiệu quả.
  • HTML và Jinja2: Sử dụng để render giao diện người dùng.

Cách lưu dữ liệu

Hướng dẫn clone và chạy lại

Cài đặt Python (phiên bản 3.x >= 3.10).
Cài đặt các công cụ cần thiết: Git, pip.
Clone repo từ github

  1. Clone repository theo cú pháp dưới:
1
git clone https://github.com/anminhhung/Pipeline_HCM_AI
  1. Tại folder vừa clone tiến hành cài các thư viện cần thiết
1
pip install requirement.txt
  1. Chạy file app
1
py app.py

Cấu trúc Thư mục và Tệp Tin

app.py: Tệp chính chứa mã nguồn của ứng dụng Flask. (demo.py để gen csdl đường dẫn đến cái file ảnh)

images/: Chứa các hình ảnh được sử dụng trong dự án.

myEnv/: Chứa các tài nguyên và môi trường ảo cần thiết cho dự án.

  • bin/: Chứa các tệp thực thi của môi trường ảo.

  • share/doc/networkx-3.1/examples/: Chứa các ví dụ liên quan đến thư viện networkx.

  • 3d_drawing/, algorithms/, basic/, drawing/, graph/, subclass/:

  • man/man1/: Chứa tài liệu hướng dẫn sử dụng.

static/: Chứa các tệp tĩnh như CSS, JavaScript, và hình ảnh.

  • css/: Chứa các tệp CSS để định dạng giao diện người dùng.

  • images/: Chứa các hình ảnh tĩnh.

  • js/: Chứa các tệp JavaScript để xử lý các tác vụ phía client.

templates/: Chứa các tệp HTML để render giao diện người dùng.

utils/: Chứa các mô-đun hỗ trợ cho ứng dụng, như query_processing và faiss.

Gói faiss:

load_bin_file(self, bin_file)

  • Đọc tệp chỉ mục FAISS từ đường dẫn bin_file và trả về chỉ mục FAISS.

show_images(self, image_paths)

  • Hiển thị các hình ảnh từ danh sách image_paths bằng Matplotlib.

image_search(self, id_query, k)

  • Tìm kiếm hình ảnh dựa trên id_query (ID của hình ảnh truy vấn) và số lượng kết quả k.
  • Trả về điểm số, ID hình ảnh, thông tin hình ảnh và đường dẫn hình ảnh.

text_search(self, text, k)

  • Tìm kiếm hình ảnh dựa trên văn bản text và số lượng kết quả k.
  • Nếu văn bản là tiếng Việt, dịch nó sang tiếng Anh.
  • Mã hóa văn bản bằng mô hình CLIP.
  • Tìm kiếm trong chỉ mục FAISS và trả về điểm số, ID hình ảnh, thông tin hình ảnh và đường dẫn hình ảnh.

Gói query_processing:

Lớp Translation

  1. init(self, from_lang=‘vi’, to_lang=‘en’, mode=‘google’)
  • Khởi tạo đối tượng Translation với các tham số:
  • from_lang: Ngôn ngữ gốc (mặc định là tiếng Việt).
  • to_lang: Ngôn ngữ đích (mặc định là tiếng Anh).
  • mode: Chế độ dịch, có thể là ‘googletrans’ hoặc ‘translate’.
  • Thiết lập bộ dịch (translator) dựa trên chế độ đã chọn.
  1. preprocessing(self, text)
  • Tiền xử lý văn bản bằng cách chuyển đổi tất cả ký tự thành chữ thường.
  1. call(self, text)
  • Tiền xử lý văn bản.
  • Dịch văn bản sử dụng bộ dịch đã thiết lập.
  • Trả về văn bản đã dịch.

Lớp Text_Preprocessing

  1. init(self, stopwords_path=’./dict/vietnamese-stopwords-dash.txt’)
  • Khởi tạo đối tượng Text_Preprocessing và tải danh sách từ dừng từ tệp.
  1. find_substring(self, string1, string2)
  • Tìm chuỗi con dài nhất chung giữa string1 và string2 bằng cách sử dụng SequenceMatcher.
  1. remove_stopwords(self, text)
  • Loại bỏ các từ dừng khỏi văn bản text đã được tách từ bằng ViTokenizer.
  1. lowercasing(self, text)
  • Chuyển đổi tất cả ký tự trong văn bản thành chữ thường.
  1. uppercasing(self, text)
  • Chuyển đổi tất cả ký tự trong văn bản thành chữ hoa.
  1. add_accents(self, text)
  • Thêm dấu cho văn bản text bằng ViUtils.add_accents.
  1. remove_accents(self, text)
  • Loại bỏ dấu trong văn bản text bằng ViUtils.remove_accents.
  1. sentence_segment(self, text)
  • Phân đoạn câu trong văn bản text bằng underthesea.sent_tokenize.
  1. text_norm(self, text)
  • Chuẩn hóa văn bản text bằng underthesea.text_normalize.
  1. text_classify(self, text)
  • Phân loại văn bản text bằng underthesea.classify.
  1. sentiment_analysis(self, text)
  • Phân tích cảm xúc của văn bản text bằng underthesea.sentiment.
  1. call(self, text)
  • Thực hiện các bước tiền xử lý: chuyển thành chữ thường, loại bỏ từ dừng, chuẩn hóa văn bản.
  • Phân loại văn bản và trả về kết quả phân loại.

Chi Tiết về Cơ Sở Dữ Liệu

5.1. Loại Cơ Sở Dữ Liệu

  • Không sử dụng cơ sở dữ liệu truyền thống, thay vào đó, dữ liệu hình ảnh được lưu trữ dưới dạng tệp và thông tin đường dẫn được lưu trong tệp JSON (image_path.json).

5.2. Cấu hình và Mô Tả

  • image_path.json: Chứa các đường dẫn đến hình ảnh được map với các id tương ứng.
  • faiss_normal_ViT.bin: Tệp nhị phân chứa index FAISS cho việc tìm kiếm vector.

Hướng dẫn Deployment

Deploy lên AWS [… Đang…]

Các Lưu Ý Khác

Những lưu ý quan trọng khi làm việc với repository này

Các vấn đề thường gặp và cách khắc phục

Hướng phát triển