파 이 썬,바 이 두 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 를 기반 으로 이모 티 콘 캡 처 를 실현 하 는 것 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 캡 처 이모 티 콘 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 읽 어 주시 기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.