파 이 썬,바 이 두 AI 기반 이모 티 콘 캡 처

본 고 는 먼저 네트워크 에 있 는 이모 티 콘 이미 지 를 캡 처 한 다음 바 이 두 AI 를 이용 해 이모 티 콘 에 있 는 설명 문 자 를 인식 하고 이모 티 콘 을 이용 해 파일 이름 을 바 꾸 면 에 피 소 드 를 발표 할 때 하나씩 열 어 찾 지 않 고 파일 이름 에 따라 이모 티 콘 을 선택 해 전송 한다.
1.바 이 두 AI 오픈 플랫폼 의 Key 신청 방법
이 사례 는 바 이 두 AI 의 API 인 터 페 이 스 를 사용 해 문자 인식 을 구현 했다.따라서 해당 API 사용 권한 을 먼저 신청 해 야 합 니 다.구체 적 인 절 차 는 다음 과 같 습 니 다.
웹 브 라 우 저(예 를 들 어 Chrome 또는 불 여우)의 주소 표시 줄 에 ai.baidu.com 을 입력 하고 바 이 두 클 라 우 드 AI 홈 페이지 에 들 어가 이 페이지 에서 오른쪽 상단 단 추 를 누 르 십시오.
在这里插入图片描述
바 이 두 클 라 우 드 AI 홈 페이지 로그 인 페이지 에 들 어가 바 이 두 계 정과 비밀 번 호 를 입력 하고 없 으 면 하이퍼링크 를 눌 러 등록 신청 을 할 수 있다.
로그 인 에 성공 한 후 바 이 두 클 라 우 드 AI 홈 페이지 의 콘 솔 페이지 에 들 어가 왼쪽 내 비게 이 션 을 클릭 하고 목록 을 펼 치고 목록 의 맨 오른쪽 아래 에 있 는 분 류 를 보고 을 선택 하거나 직접 선택 한다.아래 그림 과 같다.
在这里插入图片描述 페이지 에 들 어가 바 이 두 클 라 우 드 AI 의 API 를 사용 하려 면 먼저 권한 을 신청 해 야 하고 권한 을 신청 하기 전에 자신의 앱 을 먼저 만들어 야 하기 때문에 단 추 를 누 르 면 다음 그림 과 같다.
在这里插入图片描述 페이지 에 들 어가 면 이 페이지 에 응용 프로그램의 이름 을 입력 하고 응용 유형 을 선택 하 며 인 터 페 이 스 를 선택해 야 합 니 다.주의:이곳 의 인 터 페 이 스 는 좀 더 선택 할 수 있 고 후기 에 사용 할 수 있 는 인 터 페 이 스 를 모두 선택 하면 다른 인 스 턴 스 를 개발 할 때 직접 사용 할 수 있 습 니 다.인 터 페 이 스 를 선택 한 후 문자 인식 패키지 이름 을 선택 하 십시오.여 기 는 을 선택 하고 응용 설명 을 입력 하고 단 추 를 누 르 십시오.아래 그림 과 같 습 니 다.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
생 성 완료 후 단 추 를 누 르 면 페이지 가 응용 목록 페이지 로 이동 합 니 다.이 페이지 에서 생 성 된 응용 프로그램 과 바 이 두 클 라 우 드 가 자동 으로 할당 하 는 AppID,API Key,Secret Key 를 볼 수 있 습 니 다.이 값 들 은 응용 프로그램 에 따라 다 르 기 때문에 개발 할 때 사용 할 수 있 도록 보관 해 야 합 니 다.
在这里插入图片描述  
2.붙 잡 아 라 이모 티 콘
이 예 는 바 이 두 카페 에서 직접 만 든 이모 티 콘 을 찾 았 다.https://tieba.baidu.com/p/5522091060
지금 그림 을 모두 내 려 오 려 면 구체 적 인 조작 절 차 는 다음 과 같다.
Network 스냅 백 은 JS 흑 마술 을 통 해 불 러 오 는 것 이 아니 라 Element 와 일치 하 는 지 확인 합 니 다.다음 그림 의 그림 링크 를 복사 해서 네트워크 옵션 에 있 는 Response 에서 찾 아 보 세 요.
在这里插入图片描述
Network 패키지 에서 Ajax 동적 로드 데이터 의 흔적 이 발견 되 지 않 았 습 니 다.
두 번 째 페이지 를 클릭 하면 가방 을 캡 처 하여 Ajax 가 불 러 온 흔적 을 발견 할 수 있 습 니 다.
在这里插入图片描述
첫 번 째 그림 의 url 로 검색 하면 찾 을 수 있 습 니 다.
세 개의 매개 변 수 는 pn 을 page 로 추측 합 니 다.number,즉 페이지 수,postman 또는 스스로 코드 시 뮬 레이 션 요청 을 작성 합 니 다.Host 와 X-Requested-With 를 입력 하고 pn=1 이 첫 페이지 데이터 인지 검증 하 십시오.검증 이 통과 되 었 습 니 다.즉,모든 페이지 데 이 터 는 이 인 터 페 이 스 를 통 해 얻 을 수 있 습 니 다.
먼저 마지막 페이지 가 몇 페이지 인지 불 러 온 다음 에 한 번 순환 해서 옮 겨 다 니 면 데 이 터 를 분석 하여 그림 url 을 얻 을 수 있 습 니 다.파일 을 쓰 고 여러 스 레 드 로 다운로드 할 수 있 습 니 다.상세 코드 는 다음 과 같 습 니 다.

#                 
import requests
import time
import threading
import queue
from bs4 import BeautifulSoup
import chardet
import os

tiezi_url = "https://tieba.baidu.com/p/5522091060"
headers = {
    'Host': 'tieba.baidu.com',
    'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KH'
                  'TML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
}
pic_save_dir = 'tiezi_pic/'
if not os.path.exists(pic_save_dir):  #          ,      
    os.makedirs(pic_save_dir)

pic_urls_file = 'tiezi_pic_urls.txt'
download_q = queue.Queue()  #     


#     
def get_page_count():
    try:
        resp = requests.get(tiezi_url, headers=headers, timeout=5)
        if resp is not None:
            resp.encoding = chardet.detect(resp.content)['encoding']
            html = resp.text
            soup = BeautifulSoup(html, 'lxml')
            a_s = soup.find("ul", attrs={'class': 'l_posts_num'}).findAll("a")
            for a in a_s:
                if a.get_text() == '  ':
                    return a['href'].split('=')[1]
    except Exception as e:
        print(str(e))


#     
class PicSpider(threading.Thread):
    def __init__(self, t_name, func):
        self.func = func
        threading.Thread.__init__(self, name=t_name)

    def run(self):
        self.func()


#           URL
def get_pics(count):
    params = {
        'pn': count,
        'ajax': '1',
        't': int(time.time())
    }
    try:
        resp = requests.get(tiezi_url, headers=headers, timeout=5, params=params)
        if resp is not None:
            resp.encoding = chardet.detect(resp.content)['encoding']
            html = resp.text
            soup = BeautifulSoup(html, 'lxml')
            imgs = soup.findAll('img', attrs={'class': 'BDE_Image'})
            for img in imgs:
                print(img['src'])
                with open(pic_urls_file, 'a') as fout:
                    fout.write(img['src'])
                    fout.write('
') return None except Exception: pass # def down_pics(): global download_q while not download_q.empty(): data = download_q.get() download_pic(data) download_q.task_done() # def download_pic(img_url): try: resp = requests.get(img_url, headers=headers, timeout=10) if resp.status_code == 200: print(" :" + img_url) pic_name = img_url.split("/")[-1][0:-1] with open(pic_save_dir + pic_name, "wb+") as f: f.write(resp.content) except Exception as e: print(e) if __name__ == '__main__': print(" :") if not os.path.exists(pic_urls_file): print(" , ...") page_count = get_page_count() if page_count is not None: headers['X-Requested-With'] = 'XMLHttpRequest' for page in range(1, int(page_count) + 1): get_pics(page) print(" !") headers.pop('X-Requested-With') else: print(" ") print(" ~~~~") headers['Host'] = 'imgsa.baidu.com' fo = open(pic_urls_file, "r") pic_list = fo.readlines() threads = [] for pic in pic_list: download_q.put(pic) for i in range(0, len(pic_list)): t = PicSpider(t_name=' ' + str(i), func=down_pics) t.daemon = True t.start() threads.append(t) download_q.join() for t in threads: t.join() print(" ")
실행 결과:
在这里插入图片描述
다음은 OCR 문자 인식 기술 을 통 해 표정 에 있 는 문 자 를 직접 제시 한 다음 에 그림 을 명명 하면 바로 파일 로 표정 키 워드 를 검색 하고 필요 한 표정 그림 을 신속하게 찾 을 수 있다.구 글 의 OCR 문자 인식 엔진:Tesseract 를 사용 하면 이런 큰 그림 과 작은 문자 에 적합 하지 않 고 식별 율 이 너무 낮 으 며 심지어 식별 할 수 없다.이때 바 이 두 클 라 우 드 OCR 을 사용 하 는 것 이 적당 하 다.이 는 그림 의 구체 적 인 위 치 를 자동 으로 찾 아 그림 속 의 모든 문 자 를 찾 을 수 있다.
3.Baidu-aip 사용
바 이 두 AI 애플 리 케 이 션 키 를 신청 하면 로 컬 시스템 에 Baidu-aip 을 설치 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다.

pip install baidu-aip 
먼저 그림 한 장 을 식별 하고 효과 가 어떤 지 봅 시다.

from aip import AipOcr

#     AipOcr  
config = {
    'appId': '     appId',
    'apiKey': '     apiKey',
    'secretKey': '     secretKey'
}
client = AipOcr(**config)


#         
def img_to_str(image_path):
    #     
    with open(image_path, 'rb') as fp:
        image = fp.read()

        #         ,          
    result = client.basicGeneral(image)
    #       
    if 'words_result' in result:
        return '
'.join([w['words'] for w in result['words_result']]) if __name__ == '__main__': print(img_to_str('tiezi_pic/5c0ddb1e4134970aebd593e29ecad1c8a5865dbd.jpg'))
프로그램 을 실행 합 니 다.결 과 는 다음 그림 과 같 습 니 다.
在这里插入图片描述
바 이 두 AI 는 JSON 형식의 데 이 터 를 다음 과 같이 되 돌려 줍 니 다.로그 를 포함 한 사전 대상 을 되 돌려 줍 니 다.id、words_result_num、words_result 세 개의 키,그 중 wordsresult_num 식별 텍스트 줄 수,wordsresult 는 하나의 목록 입 니 다.각 목록 항목 은 식 별 된 텍스트 를 기록 하고 각 항목 은 사전 대상 을 되 돌려 줍 니 다.words 키,words 가 식 별 된 텍스트 를 포함 합 니 다.

{'words_result': [{'words': 'o。o'}, {'words': '6226-16:59'}, {'words': '  jpg'}], 'log_id': 1393611954748129280, 'words_result_num': 3}
o。o
6226-16:59
  jpg
모든 그림 에는 워 터 마크 의 날짜 문자 와 개별 특수 한 문자 기호 가 잘못 해석 되 었 을 수 있 기 때문에 우 리 는 한자 나 자모 정 보 를 제시 해 야 하 는 동시에 여러 개의 한자 정 보 를 포함 할 수 있 습 니 다.본 예 는 한자 나 자모 가 가장 긴 하 나 를 선택 하여 파일 을 명명 해 야 합 니 다.전체 예제 코드 는 다음 과 같 습 니 다.

#       ,        

import os
from aip import AipOcr
import re
import datetime

#     AipOcr  
config = {
    'appId': '     appId',
    'apiKey': '     apiKey',
    'secretKey': '     secretKey'
}
client = AipOcr(**config)

pic_dir = r"tiezi_pic/"


#     
def get_file_content(file_path):
    with open(file_path, 'rb') as fp:
        return fp.read()


#         
def img_to_str(image_path):
    image = get_file_content(image_path)
    #         ,          
    result = client.basicGeneral(image)
    #       
    words_list = []
    if 'words_result' in result:
        if len(result['words_result']) > 0:
            for w in result['words_result']:
                words_list.append(w['words'])
            file_name = get_longest_str(words_list)
            print(file_name)
            file_dir_name = pic_dir + str(file_name).replace("/", "") + '.jpg'
            if os.path.exists(file_dir_name):  #         
                sec = datetime.datetime.now().microsecond  #         
                file_dir_name = pic_dir + str(file_name).replace("/", "") + str(sec) + '.jpg'
            try:
                os.rename(image_path, file_dir_name)
            except Exception:
                print("      :", image_path, " => ", file_name)


#               
def get_longest_str(str_list):
    pat = re.compile(r'[\u4e00-\u9fa5A-Za-z]+')
    str = max(str_list, key=hanzi_len)
    result = pat.findall(str)
    return ''.join(result)


def hanzi_len(item):
    pat = re.compile(r'[\u4e00-\u9fa5]+')
    sum = 0
    for i in item:
        if pat.search(i):
            sum += 1
    return sum


#             
def query_picture(dir_path):
    pic_path_list = []
    for filename in os.listdir(dir_path):
        pic_path_list.append(dir_path + filename)
    return pic_path_list


if __name__ == '__main__':
    pic_list = query_picture(pic_dir)
    if len(pic_list) > 0:
        for i in pic_list:
            img_to_str(i)
프로그램 을 실행 합 니 다.결 과 는 다음 그림 과 같 습 니 다.
在这里插入图片描述
파 이 썬 이 바 이 두 AI 를 기반 으로 이모 티 콘 캡 처 를 실현 하 는 것 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 캡 처 이모 티 콘 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 읽 어 주시 기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기