# 플랫폼 소개

# ByteBridge는 무엇인가요?

ByteBridge는 데이터 레이블링을 제공하는 올인원 데이터 레이블링 서비스를 제공합니다. 대시보드를 통해 프로젝트 생성, 데이터 업로드, 레이블링 워크플로우 설정 등 일련의 과정을 간편하게 세팅할수 있습니다. ByteBridge는 휴먼파워를 활용한 레이블링을 진행합니다.

효율적인 관리 도구를 통해 모든 프로젝트를 실시간으로 관리합니다

투명하고 표준화된 가격으로 프로젝트에 드는 비용을 최소화 합니다

사용자는 프로젝트를 언제든지 시작, 종료할 수 있으며, 실시간으로 검수를 진행하며 결과를 확인할 수 있습니다

# ByteBridge 제공 서비스

# 데이터 레이블링

이미지: 분류, 바운딩 박스, 회전 바운딩 박스, 폴리곤, 키포인트, 폴리라인, 큐보이드(3D 바운딩 박스), OCR, 세그멘테이션

오디오: 분류, 감정 분석, TTS

동영상: 분류, 이벤트 분석, 대상 인식, 대상 추적

텍스트: 대상 인식 , 번역

# 데이터 수집

데이터 레이블링 서비스 이외에도 ByteBridge는 데이터 수집 서비스도 제공하고 있습니다. 관련 문의사항은 ByteBridge 팀에게 연락해 주시기바랍니다

# ByteBridge의 장점

# 높은 정확도

복잡한 작업을 자동으로 작은 단위로 쪼갠 후 합의 알고리즘을 통해 더 나은 데이터 품질과 정확도를 확보합니다. 모든 작업 데이터에 대해 사람과 알고리즘을 통한 검수가 이뤄집니다

# 높은 효율성

컨센서스 메커니즘을 이용한 실시간 데이터 검증, 그리고 레이블링과 거의 동시에 이뤄지는 컨센서스 메커니즘의 실시간 데이터 검수를 통해 보다 짧은 시간에 대량으로 정확한 데이터를 확보합니다

컨센서스 메커니즘: 하나의 작업을 여러 명의 작업자에게 분배 후 대부분의 작업자가 동의한결과가 최종 결과로 확정됩니다

# 유연성

사용자가 직접 대시보드에서 직접 레이블링 규칙을 정할 수 있습니다

사용자는 각자의 AI 모델 테스트 단계에 따라, 직접 레이블링 데이터의 속성, 유형, 및 수량을 조정할 수 있습니다

진행 상황 미리보기: 프로젝트 진행 상황을 실시간으로 확인할 수 있습니다

결과 미리보기: 레이블링된 결과를 실시간으로 확인할 수 있습니다

API 연동을 통해 결과를 실시간으로 가져갈 수 있습니다

# 투명한 가격

중개인을 통하지 않으며, AI로 최적화된 자동 워크플로우를 구성하여, 가성비 높은 서비스를 제공합니다

투명한 견적 가격을 제공합니다

# API

손쉽게 연동 가능한 API로 고객님의 시스템에 직접 데이터를 제공합니다

# 초보 가이드

# 어떻게 시작하나요?

목차

  1. 계정 생성
  2. 프로젝트 생성
  3. 워크플로우 설정
  4. 데이터 업로드
  5. 프로젝트 확인 및 제출
  6. 데모 레이블링 결과 확인
  7. 데이터 보충
  8. 결제 후 프로젝트 시작하기

# 계정 만들기

ByteBridge 서비스를 사용하시기 전에 이메일 주소를 통해계정을 생성하세요 (opens new window)

drawing

# 프로젝트 생성

대시보드에 로그인 후, 【Create Project】를 클릭하세요

drawing

프로젝트 유형을 선택하세요. 데이터 수집도 자동 등록이 지원될 예정입니다

drawing

# 데이터 업로드

현재 홈페이지에서는 직접 파일 업로드, API 업로드 두 가지 방식을 지원하고 있습니다. 홈페이지 내 업로드 : 드래그 혹은 클릭을 통해 레이블링이 필요한 데이터를 업로드할 수 있습니

drawing

# 워크플로우 설정

프로젝트 템플릿을 선택하세요. 또한, 새로운 템플릿【Start over】를 생성하실 수도 있습니다

drawing

왼쪽 아래에 있는 【Start building】을 클릭하시면 프로젝트가 생성됩니다. 이제 실제 수요에 알맞은 워크플로우를 설정하실 수 있습니다

워크플로우는 무엇인가요?

프로젝트의 레이블링 파이프라인을 완성하기 위해, 여러 작업을 일정한 논리로 연결한 것을 워크플로우라고 합니다

하나의 워크플로우는 1-99개의 분기점으로 구성되며, 각 분기점마다 최종 완료 지점이 존재합니다. 모든 데이터가 워크플로우 상의 완료 지점에 도달할 경우 프로젝트가 완료됩니다

왼쪽에 있는 작업 유형을 클릭해 새로운 작업을 추가하세요

drawing

작업 항목을 드래그해 작업을 추가할 수 있습니다

drawing

새로 추가한 작업을 선택하고 작업의 상세정보를 편집할 수 있습니다

drawing

만약 작업을 잘못 올린 경우, 해당 작업을 삭제하실 수 있습니다

drawing

이미 추가한 작업에 대해 Ctrl+C/X/V로 복사하기,잘라내기, 붙여넣기 동작을 할 수 있습니다. 모든 워크플로우는 마지막 완료된 분기점을 설정해야 합니다. 모든 데이터는 사용자가 설정한 워크플로우에 따라 레이블링을 진행하게 됩니다

모든 작업의 분기점과 완료지점을 모두 설정한 후에 완료를 누르시면 전체 워크플로우가 완성됩니다

drawing

# 프로젝트 확인 및 제출

워크플로우 설정을 완료하고 데이터를 업로드하고, 레이블링 정밀도를 선택완료 후, 하단의 【Submit】 버튼으로 프로젝트를 제출할 수 있습니다. 프로젝트가 제출되면 저희 스태프가 회원님의 정보를 확인합니다. 확인 완료 후 자동으로 데모 레이블링이 시작됩니다.

drawing

# 데모 레이블링 결과 확인

데모 레이블링이 끝나면 시스템이 알림을 보내드립니다. 데모 레이블링의 결과에 문제가 없는지 확인 후 페이지 내에 있는 [데모 레이블링 결과 통과]를 클릭하고 다음 단계로 넘어갈 수 있습니다. 수정이 필요한 내용이 있는 경우 의견을 남겨주시고 [모든 문제 제출]을 눌러주세요. [데모 레이블링에 문제 있음]을 클릭해서 설정 화면에서 워크플로우, 레이블링 수요를 변경 할수 있습니다. [다시 레이블링 하기]로 다시 레이블링을 요청할 수 있습니다. (데모 레이블링 결과가 승인된 후에야 프로젝트를 정식으로 시작할 수 있으며, 그때 결제가 이뤄지게 됩니다)

# 데이터 보충

데모 레이블링 결과 확인 후, 레이블링이 필요한 데이터를 추가할 수 있습니다

# 결제 후 프로젝트 시작하기

데모 레이블링된 데이터의 평균가격을 기준으로 전체 프로젝트에 대한 비용을 책정합니다. (이 가격은 정확하지 않을 수 있습니다) 화면 내의 [Confirm]을 클릭하면 프로젝트 예상 비용에 따라 크레딧에 대한 청구가 이뤄지며, 결제완료 후 프로젝트가 자동으로 시작됩니다

# 실시간 모니터링 및 프로젝트 관리

프로젝트 시작 후, 프로젝트 상세 정보 페이지에서 프로젝트의 진행 상황을 실시간으로 체크할 수 있습니다. 프로젝트의 진행 상황은 데이터 처리 상황, 비용, 완성된 데이터를 포함합니다. 또한, 상세 정보 페이지에서 프로젝트를 일시정지/시작할 수 있습니다.

image-20210204172042435

# 레이블링 데이터 검수

데이터 검수 화면에서 개별 레이블링의 결과, 혹은 한 장의 이미지의 결과에 대해 검수를 실시간으로 할 수 있습니다. 메일 알림을 받은후 21일내로 수정의견을 주시지 않을 경우 데이터의 검수가 완료하신 것으로 간주합니다

# 이메일 알림

프로젝트 심사, 결제가 모두 완료될 시 이메일 알림을 보내드립니다

# 개인 클라우드 업로드

# AWS S3에 데이터셋 업로드

  1. AWS 로그인, 콘솔 접속 aws1

  2. 계정 생성 aws21 aws22 aws23

  3. 권한 설정

aws3

비고 : AmazonS3FullAccess, AmazonS3ReadOnlyAccess 선택을 추천합니다. 또는 기타 버킷을 읽어올 수 있는 권한을 선택하세요

  1. 액세스 키 ID와 개인 액세스 키 가져오기 aws4

  2. 데이터 업로드 시, AWS S3를 선택하세요 aws5

  3. 추가할 데이터가 저장되어 있는 버킷 이름을 입력합니다(Bucket name)

aws6

참고: Private Cloud Address는 버킷 이름과 파일 저장 주소만 입력하면 되며 현재는 버킷 아래의 모든 파일만 지원됩니다

  1. 액세스 키 ID와 개인 액세스 키를 입력하세요

aws7

  1. 버킷이 위치한 지역의 코드를 선택하세요 aws81 비고 : 아마존 글로벌 지역 리스트를 참고하여 버킷이 위치한 지역의 코드를 획득하세요.

aws82

  1. 추가할 데이터 제출

# 구글 클라우드에 데이터셋 업로드

  1. 구글 클라우드 로그인, 콘솔 접속 gg1

  2. 서버 계정 생성 gg21 gg22

  3. 권한 설정 gg3 주의 : Storage Admin, Storage Object Viewer을 선택하세요. 또는 기타 읽을 수 있는 스토리지 파티션의 권한을 선택하세요.

  4. keyfile 파일 생성 gg41 gg42 gg43 비고 : json을 선택하면 json 파일이 자동으로 다운로드됩니다. 안전하게 저장하세요.

  5. 데이터 업로드 시, 구글 클라우드 선택 gg5

  6. 추가할 데이터가 저장되어 있는 버킷 이름을 입력합니다(Bucket name) gg6

참고: Storage partiton는 bucket name만 입력해주세요. 입력시 저장 주소를 포함하지 마시길 바랍니다. 현재 는 bucket 아래의 모든 파일만 지원됩니다

  1. keyfile 정보 입력 gg7

참고 : 직접 json파일의 전체 내용을 복사해서 붙여넣기.

  1. 추가할 데이터 제출

# 데이터 내보내기

내보내기 형식은 labelme, voc, coco과 호환 가능한 json, xml 파일입니다

image-20210204172101058

홈페이지를 통한 내보내기 외에, API를 통해 자동으로 결과를 내보내기 할 수 있습니다

# 가격 및 결제 관련 안내

# 가격 안내

ByteBridge는 투명하고, 표준화된 가격 서비스를 제공합니다. 데이터 처리 과정에 있어 필요한 작업의 숫자만큼 가격이 계산됩니다. 자세한 내용은 홈페이지에 있는 가격표를 참고하시길 바랍니다

결제 금액 = ∑ (작업이 완료되어 다운로드 가능한 파일 x 해당 작업의 가격)

한 프로젝트의 워크플로우에 2개의 분류작업과 1개의 바운딩 박스가 필요한 경우, 해당작업에 필요한 금액을 투명하게 계산하여 청구하게 됩니다

# 결제 방식

프로젝트가 정식으로 시작되면 프로젝트의 예상 비용을 계산하여 예치금을 결제하게 됩니다. 결제한 금액은 계정 잔액에 반영됩니다.프로젝트가 진행됨에 따라 계정 내 잔액이 실제 지불해야하는 금액보다 적어지는 경우, 현재 계정의 모든 프로젝트에 대해 전체적인 검토 후 신용카드에서 비용을 청구하게 됩니다. 매번 결제 시의 최소 결제 금액은 $50입니다.

# 환불정책

# 잔액 환불하기:

신용카드에서 사전 승인을 진행했지만, 실제 사용하지 않은 금액은 계정 잔액에 남게 되며, 환불 신청하기를 통해 환불을 진행할 수 있습니다. 환불은 영업일 기준 3일 내로 이뤄지며, 환불액은 이전 결제에 사용된 결제 수단으로 환불됩니다

참고1 : 환불을 신청하면 진행 중인 프로젝트가 자동으로 중지되고 이미 작업이 완료된 데이터에 대한 비용이 잔액에서 차감됩니다

참고2: 쿠폰 금액은 환불이 불가능합니다

# 차감된 금액의 환불

이미 차감된 금액에 대한 환불은 ByteBridge 플랫폼에서 직접 환불절차를 진행할 수 없습니다. 데이터 품질에 대한 이의가 있으시다면 문의하기를 통해 연락을 주시길 바랍니다. 영업일 기준 3일 내로 검토를 진행하고, 데이터가 유효하지 않은 것으로 판명되면 해당 금액이 회원님의 잔고로 반환됩니다. 그 후의 프로세스는 잔액 환불하기와 동일합니다.

# 인보이스

ByteBridge는 각 프로젝트 별로 인보이스를 발행합니다. 만약 별도 요구 사항이 있으신 경우 ByteBridge 팀에게 연락해 주시기 바랍니다

# 데이터 검수

# 자동 검수시스템

데이터 품질 향상을 위해, 고객에게 제공되는 모든 데이터는 ByteBridge 알고리즘과 휴먼파워를 통한 검수를 진행해 99% 이상의 정확성을 가지게 됩니다.

# 프로젝트 진행 중 자체 검수

프로젝트 실행과 동시에 결과를 확인할 수 있는 실시간 시각화 도구를 제공합니다. 프로젝트 진행 중, 일부 완료된 데이터에 대한 결과를 확인할 수 있습니다. ByteBridge는 여러 가지 방식으로 검수를 진행하지만, 프로젝트의 요구 사항과 100% 일치하는 정확도를 보장해 드릴수는 없습니다. 만약 출력한 결과에 대한 문의사항이 있으신 경우,ByteBridge 팀에게 연락해 주시기 바랍니다

# ByteBridge API

# API 서명

# API key 발급 및 사용자 ID 요청

ByteBridge는 사용자 ID와 API key 서명을 통해 API 접근을 관리합니다. 사용자 ID와 API key는 uuid기반으로 생성된 문자열입니다. 대시보드dashboard (opens new window)에서 user ID와 API key를 확인할 수 있습니다. 로그인 (opens new window) 혹은 신규가입 (opens new window)을 통해 해당 사이트에 접속할 수 있습니다.

secret_key = "test_78pbttim3mykypuoswidgzor6fv1u2rj"
user_id = "U_10BF4B46DD4811EA93476C96CFDDE73D"

# API key 서명 요청

API 요청을 보낼시 항상 사용자 고유 ID를 제출하고 API 비밀 키, 요청 본문, 타임스탬프 등을 사용해야 합니다. MD5 암호화를 사용하고 암호화된 문자열을 요청 본문에 배치하기 위해서는 사용자 ID와 서명된 문자열로 요청이 유효한지 확인합니다.

아래는 파이썬으로 처리한 서명의 예시입니다:

import hashlib
import requests
import time
secret_key = "test_78pbttim3mykypuoswidgzor6fv1u2rj"
user_id = "U_10BF4B46DD4811EA93476C96CFDDE73D"

# sign string
def get_sig_str(headers, body):
    sign_str = '''userID=%s&Body=%s&SignType=md5&Timestamp=%s&secretKey=%s''' % (user_id, body, headers['Timestamp'],secret_key)
    return hashlib.md5(sign_str.encode()).hexdigest().upper()
  
def test_request():
    headers = {"Content-Type": "application/json", "Timestamp": str(int(time.time() * 1000)), "SignType": "md5",
               "RequestSign": ""}
    body = {
        "userId": "U_10BF4B46DD4811EA93476C96CFDDE73D",
        "params": {}
    }
    body = json.dumps(body)
    headers["RequestSign"] = get_sig_str(headers, body)
    res = requests.post(url, data=body, headers=headers)
    try:
        print(json.dumps(json.loads(res), indent=4))
    except:
        print(res.text)
test_request()

# 콜백

# 에러

# API 에러 코드

Error Code Error Message Remarks
0 success request success
1 unknown error error for network or that error unknow
2 Parameter missing or invalid Missing or incorrect parameter for request
3 Json parsing failed Parse request header or body abnormal
4 Api request url is invalid Wrong request url used
5 Permission error, interface does not provide external access Cannot request api Interface, Usually request by invalid api url
6 API request user does not exist wrong request user you used
7 Project creation failed, please check the parameter configuration Project creation failed due to abnormal parameters
8 The project does not exist The created project cannot be queried, and the query parameters are incorrect
9 Project update failed,Please check for the project configurarion Cannot update the project due to wrong request parameters
10 Failed to submit the resource link, please check whether the resource link is too long The resource address is invalid or the resource link exceeds the length limit
10 The project has not uploaded files and cannot be opened, please upload files first Before starting the project, you need to upload resources
11 The project has not uploaded files and cannot be opened, please upload files first The project needs to upload resources first
12 Please bind credit card information in dashboard first The project is opened, you need to bind the credit card, and then open the credit card
13 The project is under review The project has been opened and submitted for review, no need to open it again
14 The project is already in progress, no need to start The project has been started and submitted for review, no need to repeatedly call to start
15 The project has been completed and can no longer be started The project has ended, you cannot open the same project
16 There is unsettled credit in this account There are outstanding items, no new items can be opened
17 There is credit under settlement, please try again later You have an item in payment, please open the current item later
18 Checking for the project status, hold on for a second You need to check whether you have any arrears information before the project starts, please start later
19 The project failed to start, please check the project configuration The configuration of the project to be opened is abnormal
20 The project has been paused The project may be suspended by the system for other reasons, or you have manually suspended
21 Project pause failed, please check the parameter configuration and try again later Pause failed, check whether the Api call is correct
22 The project can not be deleted now The item cannot be deleted in its current state (may be already in progress)
23 Failed to delete in the current state of the project The item failed to be deleted in the current state
24 Invalid resource information,Please check resource The resources uploaded by the project are invalid and cannot be distributed as tasks
25 The current project status does not allow to upload resources After the project passes the review, no more resources can be uploaded
26 Project information query failed, please check whether the retrieved parameters match Project information query failed, check the retrieval information and try again
27 api key signature verification failed The signature of the api request (signed with secret key) is invalid
28 Projects that have been opened for delivery review cannot be modified When the project opening operation personnel review, the project cannot be modified, please modify before the project is opened

# 프로젝트

# 프로젝트 생성

url 배포

url = 'http://api.bytebridge.io:20000/api/v1/projects'

url = 'http://api.bytebridge.io:20000/api/v1/projects'

url = 'http://api.bytebridge.io:20000/api/v1/projects'

본문 매개변수

사용자 ID:

"대시보드 상의 사용자 ID" 입니다

프로젝트 이름:

프로젝트를 검색하는데 문제가 생기지 않기 위해 생성된 프로젝트의 이름이 중복되지 않도록 해야 합니다.

유형:

API 요청을 통해 생성한 작업 유형이 다음 중 하나에 속하는지 확인해 주세요. 그렇지 않으면 오류가 보고되고 작업 생성을 실패할 수 있습니다.

Type name Remarks
image_classification Categorize pictures according to their content
text_classification Categorize text information according to the content of the text
image_rectangle_frame_select Use a quadrilateral to frame the objects specified in the figure
image_stroke Stroke the objects indicated in the picture

지침:

생성한 프로젝트에 대한 의견을 남겨주세요.

문제:

분류 작업을 생성할 때, 사진 속 동물이 고양이인지 개인가와 같은 질문 형식으로 생성해 주세요.

레이블링 대상:

바운딩 박스 작업을 생성할 때, 박싱 대상에 대해 설명해 주셔야 합니다.

작업 유형:

Project type Task Type Remarks
image_classification , text_classification single_choice When the project category is classified, the parameter must be selected (single_choice, multiple_choice)When the item category is frame selection, the parameter must be selected ("rectangle_frame_select","free_point","stroke","cube_circle")
image_classification , text_classification multiple_choice --------
image_rectangle_frame_select , image_stroke rectangle_frame_select ---------
image_rectangle_frame_select , image_stroke free_point ---------
image_rectangle_frame_select , image_stroke stroke ---------
image_rectangle_frame_select , image_stroke cube_circle ---------

옵션:

옵션(프로젝트 카테고리가 분류일 경우, 매개변수는 필수)

데모

요청

import requests
import json
import hashlib
import time
url = 'http://api.bytebridge.io:20000/api/v1/projects/'
secret_key = "test_78pbttim3mykypuoswidgzor6fv1u2rj"
user_id = "U_10BF4B46DD4811EA93476C96CFDDE73D"

def get_sig_str(headers, body):
    sign_str = '''userID=%s&Body=%s&SignType=md5&Timestamp=%s&secretKey=%s''' % (user_id, body, headers['Timestamp'],secret_key)
    return hashlib.md5(sign_str.encode()).hexdigest().upper()

def create_project():
    headers = {"Content-Type": "application/json", "Timestamp": str(int(time.time() * 1000)), "SignType": 'md5',
               "RequestSign": ''}
    body = {
        "userId": user_id,
        "params": {
            "projectName": "api test project",  
            "type": "image_classification", 
            'instruction': 'demo for test', 
            'question': 'Is the creature in the picture a cat or a dog', 
            "taskType": "single_choice",
            'options': [{'value': 'cat'}, {'value': 'dog'}, {'value': 'unknown'}]
        }
    }
    body = json.dumps(body)
    headers["RequestSign"] = get_sig_str(headers, body)
    res = requests.post(url, data=body, headers=headers)
    try:
        print(json.dumps(json.loads(res), indent=4))
    except:
        print(res.text)
create_project()

응답

{
	"code": 0,
	"successMsg": "success",
	"timestamp": 1597388950604,
	"userId": "U_10BF4B46DD4811EA93476C96CFDDE73D",
	"data": {
		"projectId": "p272_TJMngfdY",
		"type": "image_classification",
		"name": "demo for api test project",
		"taskType": "single_choice",
		"instruction": "demo for test",
		"qiestion": "Is the creature in the picture a cat or a dog",
		"extra": {
			"options": [{
				"value": "cat"
			}, {
				"value": "dog"
			}, {
				"value": "unknown"
			}]
		},
		"created": 1597388950
	}
}

# 프로젝트 업데이트

url 배포

url = 'http://api.bytebridge.io:20000/api/v1/projects/setProject'

본문 매개변수

사용자 ID:

"대시보드 상의 사용자 ID" 입니다

프로젝트 ID:

프로젝트 생성이 완료되면 해당 프로젝트의 고유 ID를 얻을 수 있으며, 해당 ID를 사용하여 프로젝트를 수행할 수 있습니다.

프로젝트 이름,유형,지침,문제,레이블링 대상,작업 유형,옵션:

프로젝트 생성 후 프로젝트를 시작하지 않으면 프로젝트 정보를 재설정할 수 있습니다. 하지만 프로젝트가 일단 시작되면 프로젝트 구성을 변경할 수 없습니다.

데모

요청

import requests
import json
import hashlib
import time

url = "http://api.bytebridge.io:20000/api/v1/projects/setProject"
secret_key = "test_78pbttim3mykypuoswidgzor6fv1u2rj"
user_id = "U_10BF4B46DD4811EA93476C96CFDDE73D"


def get_sig_str(headers, body):
    sign_str = '''userID=%s&Body=%s&SignType=md5&Timestamp=%s&secretKey=%s''' % (
    user_id, body, headers['Timestamp'], secret_key)
    return hashlib.md5(sign_str.encode()).hexdigest().upper()


def update_project():
    headers = {"Content-Type": "application/json", "Timestamp": str(int(time.time() * 1000)), "SignType": 'md5',"RequestSign": ''}
    body = {
        "userId": "U_10BF4B46DD4811EA93476C96CFDDE73D",
        "params": {
            "projectId": "p272_TJMngfdY",
            "projectName": "first change for demo",
            "type": "image_classification",
            'instruction': 'change it for demo ok?',
            'question': 'dog or pig in picture',
            "taskType": "single_choice",
            'options': [{'value': 'dog'}, {'value': 'pig'}, {'value': 'unknown'}]
        }
    }
    body = json.dumps(body)
    headers["RequestSign"] = get_sig_str(headers, body)
    res = requests.post(url, data=body, headers=headers)

    try:
        print(json.dumps(json.loads(res), indent=4))
    except:
        print(res.text)

update_project()

응답

{
	"code": 0,
	"successMsg": "success",
	"timestamp": 1597393803152,
	"userId": "U_10BF4B46DD4811EA93476C96CFDDE73D",
	"data": {
		"projectId": "p272_TJMngfdY",
		"type": "image_classification",
		"name": "first change for demo",
		"taskType": "single_choice",
		"instruction": "change it for demo ok?",
		"qiestion": "dog or pig in picture",
		"extra": {
			"options": [{
				"value": "dog"
			}, {
				"value": "pig"
			}, {
				"value": "unknown"
			}]
		},
		"created": 1597393803,
		"projectStatus": 0
	}
}

# 프로젝트 검색

url 배포

url = 'http://api.bytebridge.io:20000/api/v1/projects/retrieveProject'

url = 'http://api.bytebridge.io:20000/api/v1/projects/retrieveProject'

url = 'http://api.bytebridge.io:20000/api/v1/projects/retrieveProject'

본문 매개변수

사용자 ID:

"대시보드 상의 사용자 ID" 입니다

프로젝트 ID:

When you create a project successfully, it will return you the unique id of the project, and you can use the id to operate your project.

成功创建项目后,您可以获取该项目的唯一的Id,您可以使用这个Id进行项目操作。

프로젝트 생성이 완료되면 해당 프로젝트의 고유 ID를 얻을 수 있으며, 해당 ID를 사용하여 프로젝트를 수행할 수 있습니다.

시작 시간,완료 시간:

Query the information and progress of the project within a certain period of time. When no parameters are passed, the status of the project from the start to the current time is queried.

您可以查询一定时间内的项目信息和进度。 若未输入任何参数,项目状态默认从开始到当前。

일정 기간 동안의 프로젝트 정보 및 진행 상황을 조회할 수 있습니다. 매개변수를 입력하지 않으면 프로젝트 시작부터 지금까지의 시간이 기본 시간대로 설정됩니다.

데모

요청

import requests
import json
import hashlib
import time

url = 'http://api.bytebridge.io:20000/api/v1/projects/retrieveProject'
secret_key = "test_78pbttim3mykypuoswidgzor6fv1u2rj"
user_id = "U_10BF4B46DD4811EA93476C96CFDDE73D"

def get_sig_str(headers, body):
    sign_str = '''userID=%s&Body=%s&SignType=md5&Timestamp=%s&secretKey=%s''' % (user_id, body, headers['Timestamp'],secret_key)
    return hashlib.md5(sign_str.encode()).hexdigest().upper()

def retrieve_project():
    headers = {"Content-Type": "application/json", "Timestamp": str(int(time.time() * 1000)), "SignType": 'md5', "RequestSign": ''}
    body = {
        "userId": "U_10BF4B46DD4811EA93476C96CFDDE73D",
        "params": {
            "projectId": "p272_TJMngfdY",
        }
    }
    body = json.dumps(body)

    headers["RequestSign"] = get_sig_str(headers, body)
    res = requests.post(url, data=body, headers=headers)

    try:
        print(json.dumps(json.loads(res), indent=4))
    except:
        print(res.text)
retrieve_project()

응답

{
	"code": 0,
	"successMsg": "success",
	"timestamp": 1597397826240,
	"userId": "U_10BF4B46DD4811EA93476C96CFDDE73D",
	"data": {
		"projectData": {
			"projectName": "first change for demo",
			"projectInstruction": "change it for demo ok?",
			"question": "dog or pig in picture",
			"projectType": "image_classification",
			"taskType": "single_choice",
			"projectItemQuantity": 11,
			"processingQuantity": 0,
			"projectStatus": "checking",
			"completedQuantity": 0,
			"noStartQuantity": 11,
			"successQuantity": 0,
			"failedQuantity": 0,
			"outputQuantity": 0,
			"amountSpent": 0.0,
			"options": [{
				"value": "dog"
			}, {
				"value": "pig"
			}, {
				"value": "unknown"
			}]
		},
		"extraInfo": {
			"downloadableResultNum": 0,
			"downloadResultURL": ""
		}
	}
}

# 리소스 업로드

url

url = 'http://api.bytebridge.io:20000/api/v1/projects/submitResource' url = 'http://api.bytebridge.io:20000/api/v1/projects/submitResource' url = 'http://api.bytebridge.io:20000/api/v1/projects/submitResource'

본문 매개변수

사용자ID:

"대시보드 사용자ID"**

프로젝트ID:

리소스를 처리할 프로젝트의 ID

유형:

이 화면에서 프로젝트 리소스를 업로드 할수 있습니다. 업로드 가능한 리소스 유형은 아래와 같습니다.

Type name Remarks
image Picture type (jpg,jpeg,png,gif)
audio Audio in mp3 format
text type of text
graphic Picture contains text

데모

요청

import requests
import json
import hashlib
import time
url = 'http://api.bytebridge.io:20000/api/v1/projects/submitResource'
secret_key = "test_78pbttim3mykypuoswidgzor6fv1u2rj"
user_id = "U_10BF4B46DD4811EA93476C96CFDDE73D"

def get_sig_str(headers, body):
    sign_str = '''userID=%s&Body=%s&SignType=md5&Timestamp=%s&secretKey=%s''' % (user_id, body, headers['Timestamp'],secret_key)
    return hashlib.md5(sign_str.encode()).hexdigest().upper()

def submit_resource():
    headers = {"Content-Type": "application/json", "Timestamp": str(int(time.time() * 1000)), "SignType": 'md5',"RequestSign": ''}
    body = {
        "userId": "U_10BF4B46DD4811EA93476C96CFDDE73D",
        "params": {
            "projectId": "p273_j85WwxK7",
            "resourceType": "image",
            "resourceURLs": [
                "https://d301.paixin.com/thumbs/1092213/119132616/staff_1024.jpg",
                "https://d301.paixin.com/thumbs/1902695/106230432/staff_1024.jpg",
            ]
        }
    }
    body = json.dumps(body)
    headers["RequestSign"] = get_sig_str(headers, body)
    res = requests.post(url, data=body, headers=headers)
    try:
        print(json.dumps(json.loads(res), indent=4))
    except:
        print(res.text)
submit_resource()

응답

{
	"code": 0,
	"successMsg": "success",
	"timestamp": 1597656918164,
	"userId": "U_10BF4B46DD4811EA93476C96CFDDE73D",
	"data": {
		"projectId": "p273_j85WwxK7",
		"resourceType": "image",
		"resourceDta": ["https://d301.paixin.com/thumbs/1092213/119132616/staff_1024.jpg", "https://d301.paixin.com/thumbs/1902695/106230432/staff_1024.jpg"],
		"created": 1597656918
	}
}

# 프로젝트 상태

url 배포

url = 'http://api.bytebridge.io:20000/api/v1/projects/submitResource' url = 'http://api.bytebridge.io:20000/api/v1/projects/submitResource' url = 'http://api.bytebridge.io:20000/api/v1/projects/submitResource'

본문 매개변수

사용자ID:

"대시보드 사용자ID"

데모

프로젝트ID:

상태를 변경하려는 프로젝트의 ID입니다.

유형:

이 인터페이스를 통해 프로젝트 상태를 변경할 수 있습니다. 변경 가능한 상태의 종류는 다음과 같습니다.

Type name Remarks
start Start a project
pause Pause a project by yourself
delete Delete a project by yourself

요청

import requests
import json
import hashlib
import time

url = 'http://api.bytebridge.io:20000/api/v1/projects/alterState'
secret_key = "test_78pbttim3mykypuoswidgzor6fv1u2rj"
user_id = "U_10BF4B46DD4811EA93476C96CFDDE73D"

def get_sig_str(headers, body):
    sign_str = '''userID=%s&Body=%s&SignType=md5&Timestamp=%s&secretKey=%s''' % (
    user_id, body, headers['Timestamp'], secret_key)
    return hashlib.md5(sign_str.encode()).hexdigest().upper()

def Alter_project():
    headers = {"Content-Type": "application/json", "Timestamp": str(int(time.time() * 1000)), "SignType": 'md5',
               "RequestSign": ''}
    body = {
        "userId": "U_10BF4B46DD4811EA93476C96CFDDE73D",
        "params": {
            "type": "start",
            "projectId": "p273_j85WwxK7",
        }
    }
    body = json.dumps(body)
    headers["RequestSign"] = get_sig_str(headers, body)
    res = requests.post(url, data=body, headers=headers)

    try:
        print(json.dumps(json.loads(res), indent=4))
    except:
        print(res.text)
        
Alter_project()

응답

# error
{
	"code": 13,
	"errorMsg": "The project is under review",
	"timestamp": 1597657529770,
	"userId": "U_10BF4B46DD4811EA93476C96CFDDE73D"
}
# success
{
	"code": 0,
	"successMsg": "success",
	"timestamp": 1597657621240,
	"userId": "U_10BF4B46DD4811EA93476C96CFDDE73D",
	"data": {
		"projectId": "p273_j85WwxK7",
		"alterType": "pause",
		"created": 1597657621
	}
}

# 프로젝트 결과

# FAQ

# 사용 관련

# 누가 레이블링 작업을 진행하나요?

모든 데이터는 100% 휴먼파워를 통해 레이블링이 이뤄집니다. 레이블링 된 데이터는 알고리즘과 전문 인력이 검수를 한 후 최종적으로 고객에게 제공됩니다

# 레이블링 작업자를 찾을 필요는 없나요?

작업자를 따로 찾으시지 않으셔도 됩니다. ByteBridge는 종합 솔루션으로써 작업 인력과 레이블링 도구를 모두 자체적으로 제공합니다

# 이미 레이블링을 위한 인력이 있습니다. ByteBridge의 도구만 사용할 수도 있나요?

네 해당기능은 플랫폼상에서 지원가능합니다. 서포트가 필요하신 경우 ByteBridge 팀에게 연락해 주시기 바랍니다

# 워크플로우는 무엇인가요?

프로젝트의 레이블링 파이프라인을 완성하기 위해, 여러 작업을 일정한 논리로 연결한 것을 워크플로우라고 합니다 .

하나의 워크플로우는 1-99개의 분기점으로 구성되며, 각 분기점마다 최종 완료 지점이 존재합니다. 모든 데이터가 워크플로우 상의 완료 지점에 도달할 경우 프로젝트가 완료됩니다.

구체적인 설정 방식은 워크플로우 설정을 참고하세요

# 데이터 업로드, 결과 내보내기, 레이블링 등이 완료되었는지 어떻게 확인할 수 있나요?

프로젝트 상세정보 페이지에서 진행 상황을 언제나 실시간으로 확인할 수 있습니다

또한, 프로젝트 상태에 변경이 있을 경우 이메일을 통해 알림을 보내드립니다

# 프로젝트가 삭제할 수 없어요?

프로젝트가 진행 중이거나 정산이 이뤄지고 있는 경우, 바로 프로젝트를 삭제하실 수 없습니다. 페이지에 표시된 안내에 따라 재시도 해보시고, 만약 그래도 삭제가 정상적으로 이뤄지지 않는다면, ByteBridge 팀에게 연락해 주시기 바랍니다

# 왜 프로젝트 시작 전에 심사 과정이 필요한가요? 심사에는 어느정도 시간이 소요 되나요?

프로젝트의 품질 보장을 위해 프로젝트 시작 시 데이터에 대해 ByteBridge팀이 심사를 진행하고 있습니다

일반적으로 심사는 하루 내(공휴일 제외)로 처리됩니다. 만약 처리가 지연되는 경우,ByteBridge 팀에게 연락해 주시기 바랍니다

# 프로젝트를 시작했는데 진행 상황이 계속 0%로 표시되요?

프로젝트 심사가 승인된 후에 ByteBridge팀이 해당 데이터에 대한 전처리를 진행하며, 가장 적합 레이블링 작업자를 매칭합니다. 이 과정은 몇 분의 시간이 소요됩니다. 만약 심사 후 1시간이 지나도록 진행 상황에 아무런 변화가 없다면 ByteBridge 팀에게 연락해 주시기 바랍니다

# 제출한 프로젝트가 심사과정에서 불승인되었어요?

심사 결과에 대해서는 등록하신 이메일과 프로젝트 세부사항 페이지에서 상세한 정보를 확인하실 수 있습니다

워크플로우 로직 오류, 깨진 파일 업로드, 혹은 부적절한 파일 업로드 등의 문제가 있는 경우, 프로젝트 불승인 처리 될 수 있습니다

# 프로젝트에 소요되는 시간을 알고 싶어요?

프로젝트 난이도에 따라 소요 시간에 차이가 날 수 있습니다. 예를 들어 3개의 분류와 1개의 바운딩박스가 필요한 사진 작업을 10,000장 진행하는 경우, 하루 내로 작업이 완료됩니다

# 데이터 수집 서비스도 제공하나요?

데이터 레이블링 서비스 이외에 수집 서비스도 제공하고 있습니다. 관련 수요가 있으신 경우 ByteBridge 팀에게 연락해 주시기 바랍니다

# 이미 일부 레이블링이 된 이미지를 업로드 할 수도 있나요?

현재 해당 기능은 플랫폼상에서 지원되지 않습니다. 서포트가 필요하신 경우 ByteBridge 팀에게 연락해 주시기 바랍니다

# 예전에 설정했던 워크플로우를 복사해서 다시 사용할 수 있나요?

사용자 지정 탬플릿 기능을 통해, 예전에 설정했던 워크플로우를 다시 사용할 수 있습니다

# 현재 진행 중이거나 완료된 프로젝트에 데이터를 추가할 수도 있나요?

현재 해당 기능은 플랫폼상에서 지원되지 않습니다. 사용자 지정 탬플릿 기능을 통해, 예전에 설정했던 워크플로우를 다시 사용할수 있습니다

# ByteBridge 프로젝트 매니저와는 어떻게 연락을 할 수 있나요?

ByteBridge의 대부분 프로젝트는 사용자가 직접 홈페이지에서 진행할 수 있습니다. 만약 진행 과정에 문제가 발생하거나 별도 수요가 있으신 경우 언제든지 ByteBridge 팀에게 연락해 주시기 바랍니다

# 데이터 안전성

# 데이터가 정말로 안전하게 보관되나요?

레이블링 플랫폼에서 사용되는 모든 데이터는 암호화 과정을 거치고, 자동으로 여러 작업으로 파편화되어,레이블링 작업자들은 일부분의 데이터만 볼 수 있게 되므로 데이터의 안전성이 보장됩니다

고객님의 허락 없이는 절대로 데이터를 제3자에게 제공하지 않으며, 다른 용도로 사용하지 않습니다

데이터셋(레이블링 서비스를 이용한)을 삭제하시면, 2시간 이내로 ByteBridge 서버 내 모든 복사본이 영구 삭제됩니다

데이터 안전을 보장할 수 있는 계약서 및 프로세스를 통해 고객의 데이터의 유실, 유출을 방지합니다

# ByteBridge는 데이터 안전과 관련 인증서 등 서류를 가지고 있나요?

ByteBridge는 데이터 처리 관련하여 ISO27001 정보보호 인증을 취득하였습니다.

프로젝트 초기: ByteBridge와 레이블링 작업자는 정보보호와 관련된 계약을 맺습니다

관련 법규: ByteBridge는 유럽 GDPR 일반 데이터 보호 규칙을 준수하며, 관련 요구에 따라 레이블링 작업자의 소재지, 레이블링 과정 및 접근권한등을 설정합니다

데이터 분배: 분배되는 데이터는 암호화 전처리를 거치게 되며, 원데이터는 유출이 되지 않습니다

작업 분산: 레이블링 작업은 여러 단계의 단순작업으로 나뉘어져 여러 작업자에게 분산배분된 후 컨센서스를 통해 검증하고 최종 결과를 도출하게 됩니다

데이터 결합: 분산된 데이터는 서버내에서 최종적으로 결합됩니다. 레이블링 과정에서는 데이터 결합이 이뤄지지 않으므로, 결합된 데이터의 유출은 불가능합니다

데이터 저장: 데이터는 특정 고객에게 권한 할당을 통해 분리하여 별도의 서버(프라이빗 클라우드)를 구축할수 있으며, 고객이 원하는 별도의 서버에 저장하는 것도 가능합니다

# ByteBridge에 업로드한 데이터가 따로 저장되거나 제3자에게 전달되는 위험성은 없나요?

데이터는 파편화되어 레이블링 작업자가 작업 시에만 볼 수 있게 됩니다. 제3자에게 데이터는 전달되지 않으며, 다른 용도로 사용되지 않습니다

# 업로드한 파일은 어디에 보관되나요? 임시 파일이 삭제되었다는 이메일을 받았는데 이것은 무엇인가요?

프로젝트 진행 과정에서 업로드된 파일은 임시로 aws 서버에 저장됩니다

프로젝트 완료된 후 7일이 지난 경우, 혹은 프로젝트 파일 업로드 후 장기간 프로젝트를 시작하지 않은 경우에 ByteBridge는 임시저장된 파일을 삭제합니다. 삭제 전 알림을 이메일로 송부해드립니다

# 데이터 품질

# 데이터 검수 작업이 레이블링 과정에 포함되나요? 구체적으로 어떤 프로세스로 진행이 되나요?

모든 작업 결과는 100% ByteBridge 알고리즘과 휴먼파워를 통해 검수를 진행합니다

숙련도 높은 레이블링 작업자가 작업을 진행하며, 모든 작업이 검수 알고리즘을 가지고 있습니다. 실시간으로 데이터의 정확도를 여러 작업자의 컨센서스를 통해 검증하고, 레이블링 과정 중에 자동 검수를 진행하여 높은 정확도를 확보합니다

# 검수에 직접 참여할 수도 있나요?

ByteBridge는 실시간 검수 툴을 제공합니다 데이터에 대한 이의사항이 있으신 경우 데이터 작업 완료 21일내에 이의를 제기하시고 데이터 재작업을 요청하실 수 있습니다