JPMorgan Chase cut about 500 positions this week, mostly among technology and operations groups, according to people with knowledge of the move. The cuts were spread across the New York-based firm’s main divisions, said the people, who declined to be identified speaking about personnel matters. The dismissals come even as JPMorgan seeks to fill about 13,000 open positions, said one of the people.

'AI & 자동화 > API_Contents' 카테고리의 다른 글

unity_news_2023-06-09  (0) 2023.06.09
unity_news_2023-06-08  (0) 2023.06.08
disney_news_2023-06-08  (0) 2023.06.08
Today_News  (0) 2023.06.08
API Title  (0) 2023.05.23

최근에는 유부브를 비롯하여 동영상 컨텐츠가 많이 활용되고 있다. 

나 역시 동영상 강좌를 제작하는 경우가 있는데 

자막을 넣어 달라는 요청을 받는 경우가 종종있다. 

자막을 자동으로 넣어 주는 다양한 유료, 무료 프로그램이 많이 나와있지만

open ai 에서 제공하는 whisper 라는 것이 있어 활용해 보려고 한다. 

Robust Speech Recognition via Large-Scale Weak Supervision

https://openai.com/research/whisper

 인터넷에서 오디오의 대규모 스크립트를 예측하기 위해 단순히 훈련된 음성 처리 시스템의 기능을 연구합니다. 680,000시간의 다중 언어 및 다중 작업 감독으로 확장하면 생성된 모델은 표준 벤치마크에 잘 일반화되며 종종 이전의 완전히 감독된 결과와 경쟁하지만 미세 조정 없이 제로샷 전송 설정에서 수행됩니다. 인간과 비교할 때 모델은 정확도와 견고성에 접근합니다. 우리는 강력한 음성 처리에 대한 추가 작업의 기반으로 제공하기 위해 모델과 추론 코드를 출시하고 있습니다.

음성 인식 시스템(ASR)은 오디오를 텍스트로 변환하는 데 사용됩니다.

ASR 시스템은 일반적으로 오류를 범합니다.
이러한 오류는 모호한 발음, 지정 오류, 데이터 세트의 품질 등 다양한 요인으로 인해 발생할 수 있습니다.

Whisper는 680,000시간의 다중 언어 및 다중 작업 감독을 통해 훈련된 ASR 모델입니다.
Whisper는 이전의 ASR 모델보다 정확도가 높지만 여전히 오류를 범합니다.

Whisper의 성능을 인간의 성능과 비교하기 위해 연구원들은 Kincaid46 데이터 세트에서 25개의 녹음을 선택했습니다.
그들은 5개의 서비스에서 전문 녹음가를 사용하여 각 녹음의 텍스트를 생성했습니다.
이 서비스 중 하나는 컴퓨터 지원 녹음가였고 나머지 네 개는 순수하게 인간이었습니다.

연구원들은 각 녹음의 오류율(WER)과 전체 WER을 계산했습니다.
 컴퓨터 지원 녹음가가 Whisper보다 1.15% 포인트 낮은 전체 WER을 가지고 있음을 발견했습니다.
순수한 인간의 성능은 Whisper보다 훨씬 적은 비율로만 더 나았습니다.

이 결과는 Whisper의 영어 ASR 성능이 완벽하지는 않지만
인간 수준의 정확도에 매우 가깝다는 것을 보여줍니다.


Python usage

Transcription can also be performed within Python:

import whisper

model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])

Internally, the transcribe() method reads the entire file and processes the audio with a sliding 30-second window, performing autoregressive sequence-to-sequence predictions on each window.

Below is an example usage of whisper.detect_language() and whisper.decode() which provide lower-level access to the model.

import whisper

model = whisper.load_model("base")

# load audio and pad/trim it to fit 30 seconds
audio = whisper.load_audio("audio.mp3")
audio = whisper.pad_or_trim(audio)

# make log-Mel spectrogram and move to the same device as the model
mel = whisper.log_mel_spectrogram(audio).to(model.device)

# detect the spoken language
_, probs = model.detect_language(mel)
print(f"Detected language: {max(probs, key=probs.get)}")

# decode the audio
options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)

# print the recognized text
print(result.text)

 

이제 테스트를 한번 진행해 봅시다. 

2023.05.22 - [AI & 자동화/티스토리&파이썬] - 티스토리 api 자동 글쓰기 1 ( access_token )

2023.05.23 - [AI & 자동화/티스토리&파이썬] - 티스토리 api 자동 글쓰기 2 ( 파이썬 실습-글 목록 가져오기 )

 

Access_token 을 통해서 API 가 정상적으로 동작하는 것을 확인하였다. 

이제 간단한 글을 업로드 하는 작업을 진행해 보자.

기본 코드는 아래와 같으며 수정할 사항은 access_token내 블로그 url 부분이다. 

import requests

def upload_to_tistory(title, content, access_token, blog_name):
    url = f"https://www.tistory.com/apis/post/write?access_token={access_token}&output=json"
    params = {
        "title": title,
        "content": content,
        "visibility": 0,  # 0: 비공개, 1: 보호, 3: 발행
        "blogName": blog_name,
    }

    response = requests.post(url, data=params)
    if response.status_code == 200:
        print("글이 성공적으로 업로드되었습니다.")
    else:
        print(f"글 업로드 실패. 응답 코드: {response.status_code}")
        print(response.text)

# 업로드할 글의 제목과 내용 설정
title = "GPT"
content = "<p>GPT3</p>"

# Tistory API에서 발급한 액세스 토큰과 블로그명 설정
access_token = "여기에 토큰 값 넣고 "
blog_name = "여기에 블로그 주소 넣고 "

# 티스토리에 글 업로드
upload_to_tistory(title, content, access_token, blog_name)

위 처럼 업로드 하게 되면 카테고리가 없고 비공개로 처리 되기 때문에 몇 가지 조치를 해줘야 한다. 


1. 카테고리를 지정하는 방법

특정 카테고리에 글을 업로드 위해서는 카테고리 아이디를 알아야 한다. (기본값 : 0)

Categoty ID 값을 확인 하는 방법은 아래와 같다.

import requests


def category_list(access_token, blog_name):
    url = f"https://www.tistory.com/apis/category/list?output=json&blogName={blog_name}&access_token={access_token}"

    response = requests.get(url)
    data = response.json()

    if response.status_code == 200:
        print("Success")
        print(data)
    else:
        print(f"실패. 응답 코드: {response.status_code}")
        print(response.text)

# Tistory API에서 발급한 액세스 토큰과 블로그명 설정
access_token = "68afe8001e8c5649ade87fe"
blog_name = "https://bard-google.tistory.com/"

# 티스토리에 글 업로드
category_list(access_token, blog_name)

위 파이썬 코드를 실행하면 아래와 같은 결과가 나온다

읽기 좀 어렵게 되어 있으나 천천히 들여다 보면 확인할 수 있다. 

일단 API_Contents 카테고리에 글을 업로드할 예정이라서 확인해 보니 ID 는 아래처럼 나온다

{'id': '1130770', 'name': 'API_Contents',


2. 글 업로드 하기 

카테고리 아이디를 확인했으니 글을 포스팅 해보자 (ID:1130770)

소스코드를 보면 아래와 같다. 

visibility:  발행상태 (0: 비공개 - 기본값, 1: 보호, 3: 발행)

0으로 하면 비공개로 글이 업로드 되므로 처음에는 0으로 진행하여 테스트를 한 다음

3 으로 값을 변경해 주는 것이 좋다.

import requests

def upload_tistory_post(blog_name, access_token, category_id, title, content):
    url = f'https://www.tistory.com/apis/post/write'
    params = {
        'output': 'json',
        'blogName': blog_name,
        'access_token': access_token,
        'title': title,
        'content': content,
        'visibility' : 3,
        'category': category_id
    }

    response = requests.post(url, params=params)
    data = response.json()

    if 'tistory' in data and 'status' in data['tistory'] and data['tistory']['status'] == '200':
        print('Post uploaded successfully.')
    else:
        print('Failed to upload post.')

# 사용 예시
blog_name = 'YOUR_BLOG_NAME'
access_token = 'YOUR_ACCESS_TOKEN'
category_id = 'YOUR_CATEGORY_ID'
title = '제목'
content = '본문 내용'

upload_tistory_post(blog_name, access_token, category_id, title, content)

 

API_Contents 카테고리에 가면 'API_Title"  제목으로 글이 업로드 된 것을 확인 할 수 있다. 

https://bard-google.tistory.com/category/AI%20%26%20%EC%9E%90%EB%8F%99%ED%99%94/API_Contents

API 를 사용하여 파이썬으로 작성된 글

 

이제 할 일은 자동으로 글을 수집하고 가공하는 작업이다. 

수집된 데이터를 HTML 형식으로 저장하고

파일이 생성되면 자동으로 업로드하게 구성하면 된다. 

API Contents

'AI & 자동화 > API_Contents' 카테고리의 다른 글

unity_news_2023-06-09  (0) 2023.06.09
unity_news_2023-06-08  (0) 2023.06.08
disney_news_2023-06-08  (0) 2023.06.08
Today_News  (0) 2023.06.08
Today_News  (0) 2023.05.28

■ 이전 글을 통해서 access_token 을 얻게 되었다.  https://bard-google.tistory.com/17

 

티스토리 api 자동 글쓰기 1 ( access_token )

access_token 정보만 있으면 자동으로 글을 업로드 할 수 있다는 것은 알게 되었다. 그렇다면 access_token 은 어떻게 얻을 수 있을까?? access_token 을 얻기 위에서는 다음과 같은 절차를 따른다. 1. App ID +

bard-google.tistory.com

 

■ 티스토리 Open API 사이트에 가보면 할 수 있는 것들이 나열되어 있는데 

  대표적인 것이 글목록, 읽기, 쓰기, 수정, 파일 첨부, 댓글 기능이다.  (https://tistory.github.io/document-tistory-apis/ )

 

 이번에 해볼 것은 내 티스토리 블로그의 글 목록을 가져오는 파이썬 코드를 작성하여 테스트를 진행해 보려고 한다. 

다른부분은 수정할 것이 없고 access_token 에 access_token 값을 넣고 

blog_url 에 내 티스토리 블로그 주소를 넣어 주면 된다. 

import requests

def get_tistory_posts(blog_name, access_token):
    url = f'https://www.tistory.com/apis/post/list?output=json&blogName={blog_name}&access_token={access_token}'

    response = requests.get(url)
    data = response.json()

    if 'tistory' in data and 'item' in data['tistory'] and 'posts' in data['tistory']['item']:
        posts = data['tistory']['item']['posts']
        for post in posts:
            post_id = post['id']
            title = post['title']
            print(f"Post ID: {post_id}")
            print(f"Title: {title}")
            print('---')
    else:
        print('No posts found.')

# 사용 예시
blog_name = 'YOUR_BLOG_NAME'
access_token = 'YOUR_ACCESS_TOKEN'

get_tistory_posts(blog_name, access_token)

 

위와 같이 파이썬 코드를 작성 후에 실행하면 목록을 불러 오는 것을 확인 할 수 있다. 

API를 통한 목록 불러오기 결과

 

디테일한 사항은 API 사이트를 통해서 확인할 수 있다. 

https://tistory.github.io/document-tistory-apis/apis/v1/post/list.html

 

글 목록 · GitBook

No results matching ""

tistory.github.io

 

 access_token 값을 통한 API 가 잘 동작하고 있다는 것을 확인했다.

access_token 정보만 있으면 자동으로 글을 업로드 할 수 있다는 것은 알게 되었다. 

그렇다면 access_token 은 어떻게 얻을 수 있을까??

 

access_token 을 얻기 위에서는 다음과 같은 절차를 따른다.

1. App ID  +  Secret Key  를 통해서 Code 값을 얻고

2. Code   값을 통해서 Access_token 값을 구한다. 



1. AppID 와 Secret Key 얻기

 

1. 인증사이트 접속하여 등록하기  (https://www.tistory.com/guide/api/manage/register)  

 사이트에 접속해서 아래와 같이 기입한다. 

작성후에 App ID 와 secret key 를 얻게 된다. 

등록후에는 이와 같이 App ID 와  Secret Key 값을 얻을 수 있다. 



 

 

2. 접근 허가 하기 

 아래 형태로 메모장에 작성후  인터넷 url 창에 입력 후  <허가 하기>

https://www.tistory.com/oauth/authorize?

client_id={client-id}                              <= App_ID  

&redirect_uri={redirect-uri}                 <=내 블로그 주소 

 &response_type=code
 &state={state-param}



 

허가하기 버튼을 누르면 URL 창이 바뀌면서 code 값을 얻을 수 있다.   (URL 창을 닫지 말고 확인)

https://api-bard.tistory.com/?code=f5d26f1ee0...........0179361ff313c6f8c&state= {state-param}




 

3.  Access_token 얻기

 App ID 와  Secret Key 값을 알면 Access_token 을 얻을 수 있다. 

메모장을 열어서 아래 값을 변경해서 넣어 둔다. 

https://www.tistory.com/oauth/access_token?

client_id={client-id}                              <= App_ID  

&client_secret={client-secret}            <= Secret Key

&redirect_uri={redirect-uri}                 <=내 블로그 주소 

&code={code}                                     <=인증 후 받은 code 값

&grant_type=authorization_code



 

위 와 같이 준비된 상태에서 내 블로그를 들어간 다음 F12를 누르고 network 탭으로 간다. 

3-1) 내블로그 -> F12 -> Network 탭

3-2) 주소창메모장에 적어둔 내용을 기입

 

주소창에 입력 후 엔터를 누르면 아래와 같이 창이 바뀐다.  

 

status 가 200이면 정상적으로 access_token 이 발급된 것이다.  (400 은 에러 발생한 것)

 

이 토근값을 가지고 있으면 내  티스토리 API 에 접근할 수 있으므로 분실하지 말고 잘 보관해야 한다. 

 

블로그에 자동으로 글을 업로드 하는 방식을 찾아 보는 중이다. 

내가 필요로 하는 자료를 자동으로 내 블로그에 기록할 수 있으면 좋겠다. 

 예를 들면 관심있게 보고 있는 기업에 대한 report 가 업데이트 되거나 

기사가 발행되면 자동으로 내 블로그에 업로드 할 수 있도록 한다면

정보 수집을 하는 시간을 줄일 수 있 수 있을 것 같았다. 

열심히 검색을 해보니 다행히 정보가 많아서 생각보다는 쉽게 가능성을 확인 했다. 


테스트가 완료 된 코드는 아래와 같다. 

import requests

def upload_to_tistory(title, content, access_token, blog_name):
    url = f"https://www.tistory.com/apis/post/write?access_token={access_token}&output=json"
    params = {
        "title": title,
        "content": content,
        "visibility": 0,  # 0: 비공개, 1: 보호, 3: 발행
        "blogName": blog_name,
    }

    response = requests.post(url, data=params)
    if response.status_code == 200:
        print("글이 성공적으로 업로드되었습니다.")
    else:
        print(f"글 업로드 실패. 응답 코드: {response.status_code}")
        print(response.text)

# 업로드할 글의 제목과 내용 설정
title = "GPT"
content = "<p>GPT3</p>"

# Tistory API에서 발급한 액세스 토큰과 블로그명 설정
access_token = "여기에 토큰 값 넣고 "
blog_name = "여기에 블로그 주소 넣고 "

# 티스토리에 글 업로드
upload_to_tistory(title, content, access_token, blog_name)

위와 같이 파이썬 코드를 작성하면 티스토리에 비공개 글로 업데이트 된 것을 확인할 수 있다. 

테스트 결과


 

관련해서 여러 방식과 소개 자료가 있는데 결국 필요한 것은 access_token 정보 하나만 있으면 된다. 

access_token 얻는 방법을 알아 보자

가상환경 생성

웹 크롤링 작업을 진행해 볼겸해서 conda 에 가상 환경을 생성해 보려고 한다. 

conda create -n WEB_SEARCH --clone=/home/pi/miniconda3

WEB_SEARCH 라는 이름으로 진행 

Error: Error: post-link failed for: openssl-1.0.2l-0  에러 발생  

역시나 한번에 되는 건 없다. 


Error: Error: post-link failed for: openssl-1.0.2l-0" 오류는 라즈베리파이에서 conda를 설치할 때 발생할 수 있는
일반적인 오류입니다. 이 오류는 openssl 라이브러리 설치 문제로 인해 발생하며 일반적으로 파이썬 3.9 이상을 실행하는 라즈베리파이 4에서 발생합니다.

일반적인 오류라고 하니 해결해 봅시다. 

sudo apt update
sudo apt install libssl-dev

#openssl 라이브러리를 업데이트한 후 conda를 다시 설치할 수 있습니다.
conda install conda
conda install anaconda-client

WEB_SERCH 가 이미 있어서 삭제 후에 다시 생성 

#기존에 동일한 이름으로 생성이 이미 되었다면 삭제
conda env remove --n 가상환경이름

#사용자 생성
conda create -n WEB_SEARCH --clone=/home/pi/miniconda3

 

가상환경 활성화  (source activate 가상환경이름)

conda activate WEB_SEARCH 를 진행했더니 에러가 발생했다. 

source activate WEB_SEARCH

음... 설치는 되는 것 같은데 conda환경에서 라이브러리 설치를 하면 ssl 에러가 여전히 발생했다.

armv8 버전에 64bit 로 다운로드 하여 설치를 진행하였으나 이 또한 원할하지 않았다. 

 

> 라즈베리파이4 버전에서 사용할 수 있는 Conda 는 아직 원할하지 않는것 같다. 

 

리눅스 환경에서 진행하는 경우

## 환경설정 적용 (부팅 시 자동 적용 되도록 셋업을 했다면 진행하지 않아도 된다 )

source ~/.bashrc

 

### 사용자 리스트 확인 

conda env list

 

### 사용자 생성

conda create -n AI_PIC python=3.10.6

 

### 사용자 삭제 

conda env remove --n 가상환경이름

 

### 가상환경 활성화

conda activate 가상환경이름

최근 라즈베리파이는 OS 설치시에 SSH 설정을 같이 할 수 있도록 하고 있어 SD Card 로 부팅시스템을 만들고 나면 바로 SSH 접속이 가능하다.  (자세한 것은 공식 홈페이지 참조 (https://www.raspberrypi.com/software/) )

미니콘다는 파이썬 패키지 관리자 및 가상 환경 관리 프로그램인 conda의 무료 최소 설치 프로그램입니다. 아나콘다의 작은 부트스트랩 버전으로 conda, Python, 해당 패키지에 의존하는 패키지 및 pip, zlib 및 기타 몇 가지 유용한 패키지만 포함됩니다.

1. ssh 로 접속하여 폴더를 하나 만들고 miniconda 설치 파일을 다운로드 한다.
( 라즈베리파이4 CPU =  Quad core Cortex-A72 (ARM v8) 64-bit SoC)

wget https://repo.anaconda.com/miniconda/Miniconda3-py38_4.10.3-Linux-aarch64.sh

 

2. 설치 진행 (설치 경로를 변경한다. )

sudo md5sum Miniconda3-py38_4.10.3-Linux-aarch64.sh # (optional) check md5
sudo /bin/bash Miniconda3-py38_4.10.3-Linux-aarch64.sh 
# -> change default directory to 
/home/pi/miniconda3

 

3. 환경변수 추가 

#open the bashrc
sudo nano /home/pi/.bashrc 
# -> add this line: 
export PATH="/home/pi/miniconda3/bin:$PATH"

 

4. TEST

source /home/pi/.bashrc
conda
python --version

+ Recent posts