Tán gái 365 tập 2: Rekognition kiểm tra độ xinh gái của đối tượng

Hế nhô

Chào các bạn lại là - T - đây C:
Dạo gần đây có 1 thanh niên tên Tâm Nguyễn Tường dám fake bút name của mình để bú fame các bạn report chết đi nhé.
Chúng ta không nên tạo ra những công cụ để chia rẽ đôi lứa như vầy mà thay vào đó là những công cụ giúp gia tăng mật độ dân số, thêm bạn thêm vui

Vậy nên hôm nay - T - sẽ cho ra mắt tập 2: Rekognition kiểm tra độ xinh gái của đối tượng

Recap tập trước:

Mục đích:

  • Tăng skill lập trình
  • thật nhiều Gấu

rất mong được mọi người đón nhận like share subscribe để tác giả có thể xuất bản các tập tiếp theo :>

Tập 2: kiểm tra độ xinh gái của đối tượng

1 cô gái đứng trước tôi mà cúi mặt xuống có nghĩa là cô ấy đang thẹn thùng vì thích tôi, còn nếu tôi mà cúi xuống trước mặt 1 cô gái thì đơn giản là tôi thích…cặp đùi của cô ấy.

Công cụ

  • Python - ngôn ngữ lập trình tùy chọn
  • AWS Rekognition - dịch vụ phân tích, nhận diện hình ảnh, học máy của aws

Bài toán

Input: Hình ảnh
Output: Xinh or bruhh và % confidence

Nói là machine learning nhưng thực ra mình cũng ko dùng mấy thứ đao to búa lớn nào ở đây cả mà sẽ sử dụng các dịch vụ có sẵn

Dựa vào đề bài thì có thể nói đây là 1 bài toán phân loại (classification) trong machine learning khá cơ bản

OK let's go

Step 1: Chuẩn bị data

Có thể nói đây là step quan trọng nhất trong machine learning.
Tự chuẩn bị hoặc crawl hình ảnh trên mạng về
vd:

pip install BeautifulSoup requests

dùng đoạn code sau để crawl ảnh

import requests
from bs4 import BeautifulSoup

site = '###########'
savePath = 'pretty/'
response = requests.get(site)

soup = BeautifulSoup(response.text, 'html.parser')
img_tags = soup.find_all('img')

urls = [img['src'] for img in img_tags]

counter = 0
for url in urls:
    print(url)
    counter = counter + 1
    filename = str(counter) + '.jpg'
    with open(savePath+filename, 'wb') as f:
        if not url.startswith('http'):
            url = site+url
        response = requests.get(url)
        f.write(response.content)

Cách này hơi sida vì 1 số trang rất tinh vi có thể block đc hoặc sử dụng image base64, khác patterm vv

Vì vậy mình hay dùng cách thủ công chút như sau:
Save website dưới dạng file html và folder image rồi dùng đoạn code dưới để lọc lấy hình ảnh

import os
path = 'C:\\Users\\4umyo\\Desktop\\GIT\\Prettycheck\\cute_image'
files = os.listdir(path)

for index, file in enumerate(files):
    if 'jpg' in file:
        os.rename(os.path.join(path, file), os.path.join(path, ''.join([str(index), '.jpg'])))
    else: 
        os.remove(os.path.join(path, file))

Sau khi có được hình ảnh bạn cần lướt qua 1 vòng để xóa những ảnh không liên quan vd: ảnh đàn ông, text, ảnh đông người, vv

Tạo 2 set data cho gái xinh (pretty) và ... (bruhh)

Chuẩn bị 2 data set mỗi bên tầm 100 trở lên (càng nhiều càng tốt)
Dành cho bạn nào lười thì mình sẽ để sẵn data crawl được ở đây 500 ảnh mỗi loại Prettycheck

Step 2: Gán Label

Tạo 1 bucket trên aws S3 và ném 2 cục dataset mà ta vừa chuẩn bị được lên

Di chuyển qua dịch vụ aws Rekognition chọn Custom Label
Tạo data set lấy source từ bucket s3 ở trên

Lưu ý check mục Automatic attach label ... để ảnh của chúng ta được gán label sẵn luôn không thì phải gán tay rất lâu

Step 3: Traning

Qua tab project và tạo 1 project
Bên trong project ta tiến hành train model

Chọn dataset và option split training dataset 80/20 Rekognition sẽ tự động dùng 80% data để train và 20% để test

Tùy vào lượng data set mà thời gian training có thể từ 30p đến vài tiếng
Kết quả:

Sau khi train xong thì model của chúng ta đã có thể phân biệt thế nào là gái xinh rồi đó các bạn :))

Step 4: Check thoyy

Chuyển sang tab Use Model -> Start để bật server (cũng hơi lâu)
Upload file cần check lên S3 và dùng lệnh:

nhớ escape /" đối với window

aws rekognition detect-custom-labels \
  --project-version-arn "arn:aws:rekognition:ap-northeast-1:973088304254:project/pretty-checker/version/pretty-checker.2021-07-10T11.00.39/1625882439774" \
  --image '{"S3Object": {"Bucket": "MY_BUCKET","Name": "PATH_TO_MY_IMAGE"}}' \
  --region ap-northeast-1

Bạn có thể viết 1 trang nodejs đơn giản để invok cli hoặc tạo hẳn 1 site với backend dùng sdk của aws

Rất tiếc là do dịch vụ này của aws giá chát quá 4$/h nên mình không thể triển khai public ra cho mọi người dùng chơi được 🙁

LƯU Ý KHI SỬ DỤNG XONG NHỚ STOP MODEL

A di đà phật

Cái đẹp không nằm ở đôi má hồng của người thiếu nữ, mà ở trong mắt của kẻ lập trình viên

Đôi khi ta hỏi tại sao vẫn chưa có gấu? phải chăng, con số 99% có là quá cao ư? ta hận, ta không bằng lòng, ta thề với non sông sẽ cumback với những công cụ còn mạnh mẽ hơn nữa!

Thân ái và quyết thắng
.- T -

Leave a Reply