메뉴 전체보기

회원메뉴

접근 가능한 책 읽기 장치 만들기: 인쇄된 책을 소리 내어 읽는 Raspberry Pi 스캐너 > 게시판

본문 바로가기

쇼핑몰 검색

NO. 3086
제목 : 접근 가능한 책 읽기 장치 만들기: 인쇄된 책을 소리 내어 읽는 Raspberry Pi 스캐너
2026-08-25 13:33

소개: 접근 가능한 책 읽기 장치 만들기: 인쇄된 책을 소리 내어 읽는 Raspberry Pi 스캐너


소개: 접근 가능한 책 읽기 장치 만들기: 인쇄된 책을 소리 내어 읽는 Raspberry Pi 스캐너


시각장애인과 중증 시각장애인을 위한 오픈 소스·오픈 하드웨어 책 스캐너를 만들었습니다. 이 장치는 인쇄된 두 페이지를 촬영하고, 텍스트를 인식한 뒤, text-to-speech를 사용해 소리 내어 읽어 줍니다. 몇 가지 촉각식 조작부만으로 화면 없이도 사용할 수 있습니다.

중증 시각장애가 있는 사람에게 인쇄된 책과 화면 기반 독서 시스템은 사용하기 어렵거나 아예 사용할 수 없기 때문에 이 장치를 만들었습니다. 일반적인 인쇄 책을 접근 가능하게 만드는 간단하고 안정적인 방법을 제공하는 것이 목표였습니다.




STEP 1. 준비물


다음 목록에는 Accessible Book Reader의 주요 부품이 나와 있습니다. 전체 부품 목록, PCB 설계 파일, 기계 부품, 소프트웨어 및 조립 문서는 GitHub 저장소에서 확인할 수 있습니다:

https://github.com/lhm0/accessible_book_reader

주요 부품:

  1. Raspberry Pi 5 1개
  2. 140° 대각선 광각 M12 렌즈가 장착된 Arducam 16 MP IMX519 카메라 모듈 2개
  3. PN5180 NFC 브레이크아웃 보드 2개
  4. Raspberry Pi Pico 1개
  5. MAX98357A I²S 오디오 앰프 브레이크아웃 보드 1개
  6. 각종 맞춤형 PCB
  7. 3D 프린팅 인클로저 및 기계 부품
  8. 유리 패널 2개

LED 스트립, 스위치, 커넥터, 배선, 체결 부품, 스피커, 엔코더, NFC 안테나 및 전원 공급 부품 등의 추가 부품도 필요합니다. 부품을 구매하기 전에 저장소에서 최신 사양을 확인하세요.




STEP 2. Accessible Book Reader의 작동 방식


Accessible Book Reader의 작동 방식


Accessible Book Reader의 작동 방식


Accessible Book Reader의 작동 방식


Accessible Book Reader는 인쇄된 책 페이지를 음성 오디오로 변환합니다. 주요 기능은 Raspberry Pi 5가 제어하며, 사용자는 몇 가지 촉각식 조작부만으로 장치를 조작합니다.

시스템 개요

첫 번째 다이어그램은 주요 하드웨어 구성 요소를 보여 줍니다. 두 카메라는 펼쳐진 책의 왼쪽 페이지와 오른쪽 페이지를 촬영합니다. 각각 20개의 LED가 장착된 두 개의 맞춤형 LED 보드가 낮은 각도로 페이지를 비춥니다. 이를 통해 균일한 조명을 제공하면서 유리 패널의 반사를 줄일 수 있습니다.

Raspberry Pi 5는 카메라와 조명을 제어하고 이미지 처리 및 텍스트 인식을 수행합니다. 제어 패널에는 시작 버튼, 요약 버튼 2개, 회전식 볼륨 조절기 및 스피커가 있습니다. 개별 책을 식별하는 데 사용되는 추가 하드웨어는 오른쪽에 표시되어 있으며, 별도의 단계에서 설명합니다.

버튼을 누른 순간부터 오디오 출력까지

두 번째 다이어그램은 전체 읽기 과정을 보여 줍니다.

시작 버튼을 누르면 새 스캔이 시작됩니다. 두 카메라는 왼쪽 페이지와 오른쪽 페이지를 동시에 촬영합니다. 그런 다음 RapidOCR이 이미지에서 인쇄된 텍스트를 추출합니다.

페이지 수집기는 인식된 텍스트를 정리하고 구조화합니다. 여기에는 단어 분할을 제거하고, 적절한 멈춤을 삽입하며, 다음 페이지로 이어지는 문장을 처리하는 작업 등이 포함됩니다.

준비된 텍스트는 Google Cloud text-to-speech 백엔드로 전송되어 오디오로 변환됩니다. 생성된 오디오는 내장 스피커를 통해 재생됩니다.

요약 만들기

개별 페이지를 읽는 것 외에도 이 장치는 스캔한 책의 음성 요약을 만들 수 있습니다.

저장된 페이지는 약 10~20페이지 단위의 섹션으로 나뉩니다. 가능한 경우 섹션은 감지된 장 경계에서 끝납니다. Gemini는 완료된 각 섹션의 요약을 생성하고 저장합니다.

최근 페이지 버튼은 가장 최근에 읽은 내용의 요약을 제공합니다. 현재 섹션이 아직 완료되지 않았다면 장치는 마지막으로 완료된 섹션의 요약과 아직 요약되지 않은 나머지 텍스트를 결합합니다. Gemini가 이 정보를 압축하고, 결과가 음성으로 변환됩니다.

지금까지의 이야기 버튼은 현재 위치까지 책 전체의 개요를 만듭니다. 이를 위해 완료된 모든 섹션 요약을 시간순으로 결합하고, Gemini가 압축한 다음 text-to-speech를 사용해 소리 내어 읽습니다.




STEP 3. 책 호환성, 언어 및 식별


책 호환성, 언어 및 식별


Accessible Book Reader를 만들기 전에 어떤 책을 처리할 수 있는지와 개별 책을 어떻게 식별하는지 이해하는 것이 중요합니다.

지원 언어

현재 소프트웨어는 독일어와 영어 책을 지원합니다. OCR 및 text-to-speech 서비스가 지원하는 언어라면 일반적으로 다른 언어도 추가할 수 있습니다. 그러나 다른 언어를 추가하려면 소프트웨어를 그에 맞게 변경해야 합니다.

책 크기 및 페이지 레이아웃

스캐너는 최대 160 × 240 mm크기의 책 페이지를 처리할 수 있습니다.

인쇄된 텍스트는 책의 중앙에서 최소 9 mm 떨어져 있어야 하며이를 거터라고도 합니다. 중앙에 더 가까운 텍스트는 페이지의 곡률에 가려지거나 안정적으로 촬영되는 영역 밖에 놓일 수 있습니다. 이는 안쪽 여백이 매우 좁은 일부 제본이 단단한 페이퍼백에서 한계가 될 수 있습니다.

NFC 태그 및 책 식별

각 책에는 NFC 태그가 부착되어 있어야 합니다. 태그에 저장된 고유 ID는 Accessible Book Reader 내부에서 해당 책의 참조값으로 사용됩니다.

페이지를 스캔할 때마다 인식된 텍스트가 이 참조에 할당됩니다. 이를 통해 장치가 서로 다른 책의 콘텐츠를 구분하여 보관할 수 있습니다. 따라서 책 사이를 전환한 뒤 나중에 스캔을 계속해도 페이지나 요약 내용이 서로 섞이지 않습니다.

이 시스템은 다음 두 종류를 모두 지원합니다: ISO 14443AISO 15693 태그. 약간 더 비싸더라도 ISO 15693 태그를 사용하는 것을 권장합니다. 읽기 범위가 훨씬 넓어 책을 스캐너 위에 놓았을 때 감지가 더 안정적이기 때문입니다.

사진에 나온 것처럼 NFC 태그를 책 뒷표지 안쪽에 부착합니다. 한 번 설치하면 태그를 책에 영구적으로 부착해 두어도 됩니다.




STEP 4. 인클로저 부품 출력


인클로저 부품 출력


인클로저 부품 출력


인클로저 부품 출력


인클로저 부품 출력


인클로저 부품 출력


인클로저 부품 출력


인클로저 부품 출력


인클로저 부품 출력


인클로저 부품 출력


인클로저 부품 출력


인클로저 부품 출력


인클로저 부품 출력


두 개의 유리 패널을 제외한 모든 기계식 인클로저 부품은 3D 프린터로 출력합니다. 저는 Bambu Lab X1C를 사용했으며 모든 부품을 PLA로 출력했습니다.

일부 부품은 상당히 크며 프린터의 빌드 볼륨을 거의 전부 사용합니다. 따라서 베이스 플레이트는 두 부분으로 나누었습니다. 한 부품으로 출력하기에는 너무 크기 때문입니다.

부품, 특히 크고 얇은 부품은 빌드 플레이트에서 제거하기 전에 충분히 식히십시오. 아직 따뜻한 상태에서 제거하면 계속 식는 과정에서 휘거나 뒤틀릴 수 있습니다.

GitHub 저장소에는 출력에 필요한 모든 파일이 포함되어 있습니다:

  1. 원본 Autodesk Fusion 설계 파일
  2. 내보낸 STL 파일
  3. 바로 사용할 수 있는 Bambu Lab 3MF 파일

유리 패널에 맞는 부품 선택

저는 크기에 맞게 절단해 주는 eBay 판매자에게 두 개의 유리 패널을 주문했습니다. 그러나 각 패널의 짧은 변이 지정된 치수보다 약 1 mm 더 길었습니다.

이 때문에 다음 이름의 부품은 front, front2, backback2 가 두 가지 버전으로 제공됩니다. 접미사 _dev 가 붙은 파일은 제가 받은 약간 더 큰 유리 패널용으로 설계되었습니다.

이 네 부품을 출력하기 전에 유리 패널의 치수를 주의 깊게 측정하고 실제 치수에 맞는 버전을 선택하십시오.

너트 삽입 및 나사 연결

출력된 부품은 M2 및 M3 나사를 사용해 서로 연결하고 전자 부품에도 고정합니다. Raspberry Pi 5는 M2.5 나사를 사용해 장착되므로 이 추가 나사 규격도 필요하다는 점에 유의하십시오. 모델에는 해당 M2, M2.5 또는 M3 너트를 출력 중 삽입할 수 있는 홈이 있습니다. 출력이 계속되기 전에 너트를 이 홈에 넣을 수 있도록 프린터가 올바른 레이어에서 일시 정지해야 합니다.

필요한 일시 정지는 제공된 3MF 파일에 이미 포함되어 있습니다. 다른 프린터를 사용하거나 다른 슬라이서로 파일을 준비하는 경우에는 이러한 일시 정지를 직접 추가해야 합니다.

이 조립 방식은 저렴하면서도 견고하고 매우 안정적이라는 것을 확인했습니다.




STEP 5. 인클로저 조립 및 유리 패널 설치


인클로저 조립 및 유리 패널 설치


인클로저 조립 및 유리 패널 설치


인클로저 조립 및 유리 패널 설치


인클로저 조립 및 유리 패널 설치


인클로저 조립 및 유리 패널 설치


M2 및 M3 나사를 사용해 출력된 인클로저 부품을 서로 연결합니다. 부품의 위치나 방향이 확실하지 않다면 완성된 Fusion 어셈블리를 참조하십시오. 파일 abr.f3z 는 GitHub 저장소에 포함되어 있으며 Autodesk Fusion으로 열 수 있습니다.

인클로저의 박공 모양 양쪽 끝은 각각 두 부품으로 구성됩니다:

  1. frontfront2
  2. backback2

내부 부품인 frontback은 검은색으로 출력합니다. 먼저 이 부품들을 나머지 인클로저 구조물에 부착합니다.

그런 다음 두 개의 유리 패널을 위에서 아래로 내려 해당 홈에 끼웁니다. 외부 부품인 front2back2는 목재 색상의 필라멘트로 출력합니다. 가장자리가 유리 패널과 겹치면서 패널을 단단히 고정합니다.

조립 중에는 유리 패널을 분리할 수 있도록 유지

전자 부품을 설치하는 동안에는 front2back2 를 장착하지 않은 상태로 두는 것을 권장합니다. 이 외부 부품을 장착하지 않으면 인클로저 내부에 접근해야 할 때마다 유리 패널을 쉽게 분리할 수 있습니다. 테스트나 카메라 조정을 위해 필요할 때에도 빠르게 다시 끼울 수 있습니다.

나머지 조립 및 테스트 작업이 완료된 후에만 front2back2 를 설치하십시오. 이 부품들이 장착될 때까지 유리 패널은 고정되지 않아 미끄러져 빠질 수 있습니다. 이에 맞게 인클로저를 취급하고 이동하십시오.




STEP 6. 컨트롤 패널 조립


컨트롤 패널 조립


컨트롤 패널 조립


컨트롤 패널 조립


컨트롤 패널 조립


컨트롤 패널은 맞춤형 PCB 두 개를 사용합니다. 먼저 두 보드를 조립하고 납땜하십시오.

더 큰 PCB에는 푸시 버튼 세 개와 컨트롤 패널을 Raspberry Pi에 연결하는 데 사용하는 10핀 커넥터가 장착됩니다. 더 작은 PCB에는 볼륨 조절에 사용하는 EC11 로터리 엔코더가 장착됩니다.

다섯 개의 전선을 사용하여 EC11 보드를 메인 컨트롤 패널 PCB에 연결하십시오. 스피커도 더 큰 PCB에 직접 연결합니다.

전자 부품을 설치하기 전에 모든 납땜 접합부를 검사하고 커넥터와 부품의 방향을 확인하십시오. 납땜과 배선이 완료되면 인쇄된 컨트롤 패널 인클로저 내부에 두 PCB와 스피커를 장착하십시오. 조립체를 고정하기 전에 버튼과 로터리 엔코더가 해당 개구부를 통해 자유롭게 움직이는지 확인하십시오.




STEP 7. Raspberry Pi 5 설치


Raspberry Pi 5 설치


먼저 공식 Raspberry Pi Active Cooler for Raspberry Pi 5를 설치하십시오. Raspberry Pi 5 문서에 제공된 설치 지침을 따르십시오.

캡처한 페이지 이미지를 OCR 처리하는 동안 Raspberry Pi가 높은 처리 부하로 작동하므로 액티브 쿨링이 필요합니다. 인클로저의 환기구를 통해 쿨러가 외부와 공기를 교환할 수 있습니다.

쿨러를 장착한 후 네 개의 M2.5 × 20 mm 스탠드오프를 사용하여 베이스 플레이트에 Raspberry Pi 5를 장착하십시오. 패스너를 조이기 전에 보드의 방향이 올바르고 커넥터와 환기구에 계속 접근할 수 있는지 확인하십시오.

카메라 케이블 설치

다음 단계에서 익스텐션 보드를 설치하기 전에 두 개의 22핀, 200 mm FFC 케이블 을 Raspberry Pi의 카메라 커넥터에 삽입하십시오. 익스텐션 보드를 장착하면 이 커넥터에 더 이상 접근할 수 없습니다.

커넥터의 잠금 부품은 깨지기 쉬우므로 플라스틱 부품이 손상되지 않도록 조심스럽게 열고 케이블을 삽입하십시오.

다음 Type B FFC 케이블을 사용하십시오. 이 케이블 유형은 한쪽 끝에서 노출된 접점이 위쪽에 있고 다른 쪽 끝에서는 아래쪽에 있습니다.




STEP 8. 익스팬션 보드 조립


익스팬션 보드 조립


익스팬션 보드 조립


익스팬션 보드는 Raspberry Pi 5를 다음 주요 주변 장치 조립체에 연결합니다:

  1. 컨트롤 패널
  2. PN5180 NFC 리더 두 개
  3. LED PCB 두 개

이 연결은 10핀 IDC 헤더 세 개와 피치 2.5 mm의 2핀 JST-XH 커넥터 두 개를 통해 제공됩니다.

또한 보드에는 오디오 출력을 위한 MAX98357A 브레이크아웃 보드Raspberry Pi Pico가 장착되며, Raspberry Pi Pico는 두 PN5180 NFC 리더와의 통신을 처리합니다. 각 LED 보드는 고전력 N채널 MOSFET으로 스위칭됩니다.

사진에 표시된 대로 부품을 익스팬션 보드에 납땜하십시오. 커넥터, Raspberry Pi Pico, MAX98357A 모듈, MOSFET 및 모든 극성 부품의 방향에 특히 주의하십시오. 전체 회로도와 PCB 레이아웃은 GitHub 저장소의 KiCad 설계 파일에서 확인할 수 있습니다.

납땜 접합부를 확인한 후 익스팬션 보드를 Raspberry Pi 5 GPIO/HAT 헤더에 조심스럽게 맞추고 눌러 장착하십시오. 모든 헤더 핀이 올바르게 정렬되었고 앞서 설치한 카메라 케이블이 끼이거나 손상되지 않았는지 확인하십시오.

마지막으로 M2.5 나사를 사용하여 익스팬션 보드를 M2.5 스탠드오프에 고정하십시오.




STEP 9. NFC 안테나 설치


NFC 안테나 설치


NFC 안테나 설치


NFC 안테나 설치


NFC 안테나 설치


이 장치는 책의 양쪽에서 태그를 감지할 수 있도록 NFC 안테나 두 개를 사용합니다. 각 안테나는 직경 0.5 mm 에나멜 구리선 으로 만든 단일 턴 코일이며, 두 유리 패널 중 하나의 가장자리를 따라 배치됩니다.

안테나 와이어를 배선할 수 있도록 frontback 인클로저 부품에 작은 개구부가 마련되어 있습니다. 각 유리 패널의 짧은 변을 따라 사진에 표시된 대로 이 두 부품의 표면을 가로질러 와이어를 배선하십시오.

위쪽 긴 가장자리를 따라 와이어는 인클로저의 앞쪽에서 뒤쪽까지 자유롭게 이어집니다. 조립된 장치에서는 이 구간이 두 유리 패널 사이의 각도 부분에서 보입니다.

아래쪽 긴 가장자리를 따라 LED PCB용 삼각형 장착 레일 뒤쪽으로 와이어를 배선하십시오. 와이어를 지정된 경로에 가깝게 유지하십시오.

두 번째 유리 패널에도 이 과정을 반복하여 서로 분리된 단일 턴 안테나 두 개를 만드십시오. 나중에 해당 PN5180 리더에 연결할 수 있도록 양쪽 끝에 충분한 와이어를 남겨 두십시오.




STEP 10. LED 보드 설치


LED 보드 설치


먼저 각 LED PCB에 짧은 2심 케이블을 연결하십시오. 각 케이블의 반대쪽 끝에는 압착된 2핀 JST-XH 커넥터를 연결하십시오. LED 보드와 확장 보드에 표시된 극성을 확인하십시오.

다음으로 M2 나사를 사용하여 왼쪽 및 오른쪽 삼각형 장착 레일을 해당 인클로저 부품에 부착하십시오.

이 레일은 NFC 안테나 와이어가 지나가는 홈 바로 앞에 배치됩니다. 나사를 조이기 전에 각 와이어가 홈 안에 완전히 안착되어 있고 장착 레일 아래에 갇히거나 눌리지 않았는지 확인하십시오.

두 LED PCB를 삼각형 레일에 장착하고 M2 나사로 고정하십시오. 마지막으로 JST-XH 플러그를 해당 왼쪽 LED오른쪽 LED 소켓에 연결하십시오(Raspberry Pi 확장 보드에 있음).




STEP 11. PN5180 브레이크아웃 보드 수정


PN5180 브레이크아웃 보드 수정


PN5180 브레이크아웃 보드 수정


PN5180 브레이크아웃 보드 수정


NFC 시스템은 두 개의 PN5180 브레이크아웃 보드를 기반으로 합니다. 각 모듈에는 기판에 인쇄된 안테나가 포함되어 있지만, 그 판독 거리는 Accessible Book Reader에 충분하지 않습니다. 따라서 유리 패널 주변에 설치된 대형 외부 안테나 루프를 연결할 수 있도록 보드를 수정해야 합니다.

이 수정은 되돌릴 수 없으므로, 트레이스를 절단하기 전에 사진을 주의 깊게 확인하십시오.

먼저 양쪽 끝에서 인쇄 안테나의 PCB 트레이스를 끊습니다. 두 절단 위치의 정확한 지점은 사진에 나와 있습니다. 각 트레이스가 완전히 절단되었는지 확인하고, 기판 안테나가 전기적으로 분리되었는지 검증하십시오.

그다음 각 안테나 연결 지점에서 솔더 마스크의 작은 영역을 조심스럽게 제거하여 아래의 구리를 노출합니다. 노출된 구리에 납을 입힌 다음, 사진에 나온 것처럼 준비된 두 접점에 안테나 커넥터를 납땜합니다. 열을 너무 오래 가하지 마십시오. PCB에서 구리 트레이스가 들릴 수 있습니다.

두 안테나 간 전환

두 PN5180 리더는 안테나끼리 서로 간섭하므로 동시에 작동할 수 없습니다. 비활성 상태인 두 번째 안테나도 전기적으로 연결된 상태로 남아 있으면 현재 사용 중인 리더에 영향을 줄 수 있습니다.

이러한 이유로 소형 릴레이 인터페이스 보드를 제작하여 PN5180 리더와 외부 안테나 사이에 삽입했습니다. 한 리더가 활성화되면 릴레이 회로가 다른 리더에 연결된 안테나를 전기적으로 분리합니다. 그러면 책의 반대쪽을 확인해야 할 때 시스템이 전환됩니다.

이 구성은 두 대형 안테나 루프가 서로 간섭하는 것을 방지하며, 실제 사용에서 매우 안정적인 것으로 입증되었습니다.

릴레이 보드 조립

릴레이, CD4093 로직 IC 및 나머지 부품을 릴레이 보드에 납땜합니다. 그런 다음 네 개의 전선을 사용하여 릴레이 보드를 PN5180 브레이크아웃 보드에 연결합니다. 부품 배치, 배선 세부 사항 및 연결 지점은 사진과 GitHub 저장소의 KiCad 설계 파일을 참조하십시오.

안테나 튜닝 커패시터 선택

커패시터 C1과 C2는 안테나의 공진 주파수를 NFC 리더의 동작 주파수에 맞추는 데 사용됩니다. 두 커패시터는 병렬로 연결되므로 정전 용량이 합산됩니다.

ISO 15693 태그만 사용할 예정이라면 22 pF 커패시터 를 한 위치에 장착하고 다른 위치는 비워 둡니다. ISO 14443A 태그도 사용하려면 더 정밀한 안테나 튜닝 절차를 권장하며, 이는 뒤의 단계에서 설명합니다.

이 조정을 준비하려면 먼저 18 pF 커패시터를 설치합니다. 튜닝 과정에서 2 pF, 3 pF, 4 pF 또는 5 pF 의 작은 추가 정전 용량을 더하여 최상의 결과를 얻을 수 있습니다.

인터페이스 어댑터 설치

Raspberry Pi Pico와의 연결은 10핀 IDC 커넥터가 장착된 소형 인터페이스 보드를 통해 이루어집니다. 먼저 IDC 커넥터를 인터페이스 보드에 납땜합니다. 그런 다음 핀 헤더를 사용하여 완성된 인터페이스 보드를 PN5180 브레이크아웃 보드에 납땜합니다. 납땜하기 전에 IDC 커넥터와 핀 헤더의 방향을 모두 확인하십시오.




STEP 12. 카메라 설치


카메라 설치


두 카메라 모듈을 장착하기 전에 각 렌즈의 초점 조절을 해제합니다. 렌즈 링은 소량의 접착제로 고정되어 있으므로 날카로운 칼로 조심스럽게 잘라내야 합니다.

작업 중 돋보기로 접착 이음부를 검사하십시오. 접착제만 절단하고, 미세한 렌즈 나사산이나 주변 카메라 부품이 손상되지 않도록 특히 주의하십시오. 접착제가 제거되면 렌즈를 회전할 수 있으며, 시운전 중 카메라의 초점을 수동으로 조정할 수 있습니다.

그다음 M2 나사를 사용하여 두 카메라 마운트를 베이스 플레이트에 부착하십시오. 각 카메라 모듈을 나사 4개로 홀더에 설치하십시오. 홀더는 카메라를 필요한 45도 각도로 배치합니다.

마지막으로 앞서 설치한 FFC 케이블을 카메라 모듈에 연결하십시오. FFC 커넥터와 잠금 탭은 손상되기 쉬우므로 케이블을 곧게 삽입하고 잠금 장치를 조심스럽게 닫으십시오. 카메라를 고정하고 케이블을 배선하기 전에 각 케이블이 끝까지 제대로 삽입되었고 방향이 올바른지 확인하십시오.




STEP 13. 전자 장치 연결


전자 장치 연결


전자 장치 연결


전자 장치 연결


Raspberry Pi 확장 보드를 컨트롤 패널 및 두 개의 PN5180 어셈블리에 연결하는 데 10도체 리본 케이블 3개가 사용됩니다.

각 리본 케이블의 양쪽 끝에 10핀 IDC 커넥터를 하나씩 부착하십시오. 사진에 나온 것처럼 벤치 바이스를 사용하면 커넥터를 케이블에 눌러 끼우기 쉽습니다. 커넥터를 주의 깊게 정렬한 다음 바이스를 천천히 닫아 전체 폭에 압력이 고르게 가해지도록 하십시오.

커넥터를 장착할 때 1번 핀의 방향에 주의하십시오. 리본 케이블의 표시된 도체(일반적으로 색상 줄로 표시됨)는 양쪽 끝에서 모두 1번 핀에 대응해야 합니다. 또한 눌러 결합하기 전에 커넥터의 키와 스트레인 릴리프 부분의 방향도 확인하십시오.

커넥터 6개를 모두 설치했으면 케이블을 검사하고 가능하다면 도통을 확인하십시오. 그런 다음 케이블 하나를 컨트롤 패널에 연결하고, 나머지 케이블을 각각 PN5180 어셈블리에 연결하십시오. 반대쪽 끝은 Raspberry Pi 확장 보드의 해당 커넥터에 꽂으십시오.




STEP 14. Raspberry Pi Pico에 펌웨어 설치


USB 부트로더 드라이브에 UF2 파일을 복사하여 Raspberry Pi Pico에 펌웨어를 설치할 수 있습니다. 추가 프로그래밍 하드웨어는 필요하지 않습니다.

준비된 펌웨어 이미지는 다음 저장소 경로에 있습니다:

hardware/pn5180_gateway/firmware/pn5180_gateway_pico.uf2

다음과 같이 설치하십시오:

  1. Raspberry Pi Pico를 USB에서 분리하십시오.
  2. 다음 버튼을 길게 누르십시오: BOOTSEL 버튼.
  3. 버튼을 계속 누른 상태에서 USB 케이블을 사용하여 Pico를 컴퓨터에 연결하십시오.
  4. 다음 버튼을 놓으십시오: BOOTSEL 버튼.
  5. 컴퓨터에 다음 이름의 이동식 드라이브가 나타나야 합니다: RPI-RP2 .
  6. pn5180_gateway_pico.uf2 파일을 다음 드라이브로 끌어다 놓으십시오: RPI-RP2 .

파일이 복사되면 드라이브가 자동으로 사라지고 Pico가 새 펌웨어로 다시 시작됩니다. 이는 정상적인 동작이며 펌웨어가 설치되었음을 나타냅니다.




STEP 15. 전자 장치 커버 설치


전자 장치 커버 설치


모든 전자 부품을 설치하고 배선을 완료한 후, 내부 전자 장치 커버 두 개를 장착합니다.

고정하기 전에 모든 커넥터가 완전히 삽입되었고 커버와 인클로저 사이에 케이블이 끼어 있지 않은지 확인합니다. 케이블은 지정된 개구부를 통해 배선합니다.

Raspberry Pi 위의 커버는 밀폐된 환기 공간도 형성합니다. 환기 슬롯은 이 공간을 인클로저 외부와 연결하여 Raspberry Pi Active Cooler가 밀폐된 공간과 주변 환경 사이에서 공기를 순환시킬 수 있도록 합니다.

전자 장치와 모든 케이블 연결이 올바르게 작동하는지 확인한 후에만 두 커버를 설치하고 고정합니다.




STEP 16. Raspberry Pi 5 설정


Raspberry Pi 소프트웨어를 설치하고 구성하려면 여러 시스템 및 클라우드 서비스 설정이 필요합니다. 프로젝트가 진행됨에 따라 이러한 지침은 변경될 수 있으므로, 이 단계에서는 개요만 제공합니다. 전체 명령과 확인 절차는 항상 GitHub 저장소의 최신 문서를 따르세요.

주요 참고 문서는 다음과 같습니다:

  1. 프로젝트 README 및 설치 개요
  2. 상세 Raspberry Pi 설정 가이드
  3. 제어판 시스템 서비스
  4. 언어 구성
  5. PN5180 Pico 게이트웨이

운영 체제 설치

Raspberry Pi Imager를 사용하여 Raspberry Pi OS Lite (64-bit) 를 설치합니다. 이 과정에서 사용자 계정을 만들고 SSH를 활성화하며 초기 네트워크 연결을 구성합니다.

처음 부팅한 후 Raspberry Pi에 연결하고 운영 체제를 업데이트합니다:

sudo apt update
sudo apt full-upgrade -y
sudo reboot

Raspberry Pi 설정 가이드에 제공된 패키지 목록을 사용하여 필요한 시스템 패키지를 설치합니다.

ABR 소프트웨어 다운로드

권장 디렉터리에 저장소를 클론합니다:

mkdir -p ~/src
git clone https://github.com/lhm0/accessible_book_reader.git ~/src/abr
cd ~/src/abr

새 Python 가상 환경을 만들고 ABR 소프트웨어 및 주요 종속성을 설치합니다:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[ocr-rapidocr,dev,tts-google]"

다른 컴퓨터의 가상 환경을 복사하지 마세요. 가상 환경은 Raspberry Pi에서 직접 만들어야 합니다.

하드웨어 인터페이스 구성

Raspberry Pi 부팅 구성을 다음 항목에 맞게 조정해야 합니다:

  1. 두 대의 IMX519 카메라
  2. Raspberry Pi Pico와의 UART 연결
  3. MAX98357A 오디오 증폭기와의 I²S 연결

필요한 설정은 docs/RASPBERRY_PI_SETUP.md에 자세히 설명되어 있습니다. 저장소의 config.txt는 참고용으로만 사용하고, 내용을 검토하지 않은 상태에서 기존 /boot/firmware/config.txt 파일을 교체하지 마세요.

또한 /etc/asound.conf에서 MAX98357A를 기본 ALSA 오디오 장치로 구성해야 합니다.

부팅 구성을 변경한 후 Raspberry Pi를 다시 시작하고 두 카메라, UART 인터페이스 및 오디오 출력이 모두 올바르게 감지되는지 확인합니다.

Google Cloud 구성

프로덕션 소프트웨어는 오디오 생성을 위해 Google Cloud Text-to-Speech를, 요약을 위해 Vertex AI/Gemini를 사용합니다. Google Cloud 프로젝트를 만들고 결제를 활성화한 다음 필요한 API를 사용 설정합니다.

필수 명령은 다음과 같습니다:

gcloud services enable \
texttospeech.googleapis.com \
aiplatform.googleapis.com \
--project YOUR_PROJECT_ID

gcloud auth application-default login
gcloud auth application-default set-quota-project YOUR_PROJECT_ID
gcloud config set project YOUR_PROJECT_ID

자격 증명은 저장소 외부에 저장합니다. 자격 증명이나 액세스 키를 프로젝트 디렉터리에 복사하거나 GitHub에 커밋하지 마세요.

언어 구성 및 서비스 설치

언어 선택 명령과 프로덕션 제어판 서비스를 설치합니다:

cd ~/src/abr
sudo deploy/install_language_switch.sh
sudo deploy/install_control_panel_service.sh

필요한 책 언어를 선택합니다:

sudo abr-language de

또는:

sudo abr-language en

프로덕션 소프트웨어는 시스템 서비스로 실행되며 Raspberry Pi가 부팅될 때 자동으로 시작됩니다. 또한 SSH 연결이 종료되어도 계속 실행됩니다.

다음 명령으로 상태와 최근 로그 메시지를 확인합니다:

systemctl status abr-control-panel.service --no-pager -l
journalctl -u abr-control-panel.service -n 100 --no-pager

초기 확인 수행

카메라 정렬 및 보정을 진행하기 전에 기본 설치 상태를 확인합니다:

rpicam-hello --list-cameras
python hardware/pn5180_gateway_client.py \
--device /dev/ttyAMA0 STATUS
aplay -D default /usr/share/sounds/alsa/Front_Center.wav
abr-language status
systemctl is-active abr-control-panel.service

두 카메라가 모두 목록에 표시되고, Pico 게이트웨이가 응답하며, 테스트 사운드가 내장 스피커를 통해 재생되고, ABR 서비스가 활성 상태라고 보고해야 합니다.

문제 해결 및 전체 확인 체크리스트는 이 단계의 시작 부분에 링크된 상세 Raspberry Pi 설정 가이드를 참조하세요.




STEP 17. 카메라 정렬 및 초점 조정


카메라 정렬 및 초점 조정


카메라 정렬 및 초점 조정


카메라 렌즈는 설치 후 수동으로 초점을 맞춰야 합니다. 저장소에는 웹 브라우저에 라이브 이미지를 표시하는 간단한 카메라 테스트 서버가 포함되어 있습니다. 이를 통해 다른 컴퓨터에서 결과를 확인하면서 렌즈를 조정할 수 있습니다.

자세한 내용은 다음 문서에서 확인할 수 있습니다: 카메라 테스트 서버 문서.

스캐너 준비

사진에 표시된 것처럼 유리 패널 두 개 중 하나만 삽입하고 그 위에 인쇄된 테스트 페이지를 놓습니다. 작고 대비가 높은 텍스트가 포함된 페이지가 선명도를 판단하는 데 특히 유용합니다.

다른 유리 패널은 제거한 상태로 둡니다. 열린 쪽을 통해 해당 카메라에 접근할 수 있으며, 테스트 페이지를 올바른 스캔 위치에 둔 채 렌즈를 돌릴 수 있습니다.

일반 ABR 서비스가 이미 실행 중인 경우 카메라에 접근하지 않도록 일시적으로 중지합니다:

sudo systemctl stop abr-control-panel.service

첫 번째 카메라 초점 조정

Raspberry Pi에서 왼쪽 LED 행을 켭니다:

sudo /usr/bin/python3 hardware/led_light_test.py on --channel left

그런 다음 카메라 0의 라이브 뷰 서버를 시작합니다:

cd ~/src/abr
/usr/bin/python3 hardware/camera_test_server.py \
--camera 0 \
--port 8000

같은 네트워크에 연결된 다른 컴퓨터에서 웹 브라우저로 다음 주소를 엽니다:

http://abr.local:8000/

호스트 이름을 사용할 수 없으면 abr.local을 Raspberry Pi의 IP 주소로 바꿉니다.

브라우저의 라이브 이미지를 확인하면서 카메라 렌즈를 조금씩 조심스럽게 돌리십시오. 조정할 때마다 이미지가 안정될 때까지 기다리십시오. 관련 페이지 영역 전체에서 텍스트가 최대한 선명해질 때까지 계속하십시오.

초점을 조정하는 동안 유리나 테스트 페이지를 만지거나 움직이지 마십시오. 또한 렌즈가 홀더에서 너무 많이 풀려 나오지 않았는지 확인하십시오.

초점이 올바르게 조정되면 소량의 접착제를 떨어뜨려 렌즈를 고정하십시오. 이 용도로 UHU Hart를 사용했습니다.

완료되면 터미널에서 Ctrl+C를 눌러 테스트 서버를 중지하십시오.

두 번째 카메라 초점 맞추기

유리 패널과 테스트 페이지를 스캐너의 반대쪽으로 옮기십시오. 두 번째 카메라에 접근할 수 있도록 첫 번째 패널을 제거하십시오.

Raspberry Pi에서 왼쪽 LED 행은 끄고 오른쪽 LED 행은 켜십시오:

sudo /usr/bin/python3 hardware/led_light_test.py off --channel left
sudo /usr/bin/python3 hardware/led_light_test.py on --channel right


다른 포트에서 카메라 1용 테스트 서버를 시작하십시오:

cd ~/src/abr
/usr/bin/python3 hardware/camera_test_server.py \
--camera 1 \
--port 8001

브라우저에서 해당 페이지를 여십시오:

http://abr.local:8001/

다른 렌즈와 같은 방법으로 인쇄된 텍스트가 선명하게 보일 때까지 두 번째 렌즈를 조정하십시오. 다른 렌즈와 마찬가지로 소량의 접착제를 떨어뜨려 렌즈를 고정하십시오.

두 카메라의 초점을 모두 맞춘 후 테스트 서버를 중지하고 LED를 끈 다음 유리 패널 두 개를 모두 다시 설치하십시오. 다음 단계에서 수행하는 왜곡 보정 후에는 초점, 카메라 각도 또는 카메라 높이를 변경하지 마십시오. 기계적인 변경이 있으면 보정 데이터가 무효화됩니다.

초점 조정 작업이 완료되면 일반 ABR 서비스를 다시 시작하십시오:

sudo systemctl start abr-control-panel.service


본문이 길어 아래 덧글 1개로 계속됩니다.


원문: https://www.instructables.com/Build-an-Accessible-Book-Reader-a-Raspberry-Pi-Sca/

좋아요 0
게시판

본문 계속 1/1




STEP 18. 이미지 보정 캘리브레이션


이미지 보정 캘리브레이션


이미지 보정 캘리브레이션


이미지 보정 캘리브레이션


17단계: 이미지 보정 캘리브레이션

광각 카메라 렌즈는 강한 배럴 왜곡을 발생시킵니다. 카메라는 기계적으로 고정되어 있으므로 카메라별로 하나의 캘리브레이션 이미지를 사용하여 이 왜곡을 보정할 수 있습니다. 소프트웨어는 캡처한 모든 페이지에 적용되는 영구 리매핑 파일을 생성합니다.

전체 절차는 다음 문서에 설명되어 있습니다:

  1. ChArUco 보드
  2. 평면 ChArUco 리맵
  3. 카메라 테스트 서버

캘리브레이션 보드 준비

저장소에는 인쇄 가능한 ChArUco 캘리브레이션 보드가 이미 포함되어 있습니다:

calibration/out/charuco_160x240_a4.svg

이 파일을 100% 배율로 인쇄하십시오. “페이지에 맞추기” 또는 자동 배율 조정과 같은 옵션은 비활성화하십시오.

계속하기 전에 인쇄된 치수를 확인하십시오:

  1. 전체 보드: 160 × 240 mm
  2. 개별 사각형: 20 × 20 mm

인쇄물을 평평하고 단단한 표면에 부착하십시오. 캘리브레이션 중에는 보드가 가능한 한 평평한 상태를 유지해야 합니다.

참조 파일을 다시 생성해야 하는 경우 다음을 사용하십시오:

cd ~/src/abr
source .venv/bin/activate

python calibration/generate_charuco_board.py \
--output-prefix calibration/out/charuco_160x240

캘리브레이션 도구에는 OpenCV contrib 패키지가 필요합니다:

pip install opencv-contrib-python numpy

캘리브레이션 이미지 캡처

책 페이지와 같은 위치에 캘리브레이션 보드를 스캐너 위에 평평하게 놓으십시오. 전체 패턴이 카메라에 보여야 합니다.

카메라에 접근하기 전에 일반 ABR 서비스를 중지하십시오:

sudo systemctl stop abr-control-panel.service

적절한 LED 채널을 수동으로 켜십시오:

cd ~/src/abr
sudo /usr/bin/python3 hardware/led_light_test.py on --channel left

최대 센서 해상도로 카메라 테스트 서버를 시작하십시오. --width 또는 --height를 지정하지 마십시오. 센서 이미지의 일부가 제외될 수 있습니다.

카메라 0의 경우:

cd ~/src/abr
/usr/bin/python3 hardware/camera_test_server.py \
--camera 0 \
--port 8000

브라우저에서 라이브 이미지를 여십시오:

http://abr.local:8000/

보드가 평평하고 조명이 충분하며 필요한 페이지 영역 전체에 보이는지 확인하십시오. 그런 다음 다른 컴퓨터에서 전체 해상도 스냅샷을 저장하십시오:

cd ~/src/abr
curl http://abr.local:8000/snapshot.jpg \
-o calibration/shots/cam0_charuco_01.jpg

Ctrl+C로 서버를 중지하고 조명을 끄십시오:

sudo /usr/bin/python3 hardware/led_light_test.py off --channel left

다른 유리 패널과 LED 채널을 사용하여 카메라 1에 대해 절차를 반복하십시오:

sudo /usr/bin/python3 hardware/led_light_test.py on --channel right

/usr/bin/python3 hardware/camera_test_server.py \
--camera 1 \
--port 8001

여십시오:

http://abr.local:8001/

두 번째 캘리브레이션 이미지를 저장하십시오:

curl http://abr.local:8001/snapshot.jpg \
-o calibration/shots/cam1_charuco_01.jpg

그런 다음 서버를 중지하고 LED를 끄십시오:

sudo /usr/bin/python3 hardware/led_light_test.py off --channel right

보정 맵 생성

카메라 0용 캘리브레이션 프로그램을 실행하십시오:

cd ~/src/abr
source .venv/bin/activate

python calibration/calibrate_planar_charuco.py \
--image calibration/shots/cam0_charuco_01.jpg \
--board-json calibration/out/charuco_160x240.json \
--output-prefix calibration/out/cam0_planar \
--alpha 1.0 \
--preview-width 1600

카메라 1에 대해서도 이 과정을 반복하십시오:

python calibration/calibrate_planar_charuco.py \
--image calibration/shots/cam1_charuco_01.jpg \
--board-json calibration/out/charuco_160x240.json \
--output-prefix calibration/out/cam1_planar \
--alpha 1.0 \
--preview-width 1600

각 카메라에 대해 프로그램은 다음을 포함한 여러 파일을 생성합니다:

calibration/out/cam0_planar.npz
calibration/out/cam0_planar_rectified.jpg
calibration/out/cam0_planar_detected.jpg

calibration/out/cam1_planar.npz
calibration/out/cam1_planar_rectified.jpg
calibration/out/cam1_planar_detected.jpg

검출 결과 및 보정된 미리보기 이미지를 확인하십시오. 체커보드 선은 곧게 보여야 하며, 보드는 눈에 띄는 불연속 없이 깔끔한 직사각형 형태로 변환되어야 합니다.

다른 컴퓨터에서 캘리브레이션을 수행한 경우 결과로 생성된 cam0_planar.npz 및 cam1_planar.npz 파일을 Raspberry Pi의 동일한 calibration/out/ 디렉터리로 복사하십시오.

두 .npz 파일은 각 카메라와 카메라의 정확한 기계적 위치에 따라 달라집니다. 초점, 카메라 각도, 카메라 높이 또는 카메라 모듈을 변경할 때마다 캘리브레이션을 반복하십시오.

마지막으로 ABR 서비스를 다시 시작하십시오:

sudo systemctl start abr-control-panel.service





STEP 19. PN5180 안테나 조정


각 외부 NFC 안테나의 공진을 조정하여 가능한 한 최상의 판독 거리를 확보해야 합니다. 두 리더에 대해 이 절차를 각각 수행하십시오.

Raspberry Pi는 Raspberry Pi Pico를 통해 PN5180 게이트웨이와 통신합니다. 다음 명령은 두 리더의 상태를 요청하고 감지된 ISO 14443A 및 ISO 15693 태그를 보고합니다:

cd ~/src/abr
source .venv/bin/activate

python hardware/pn5180_gateway_client.py \
--device /dev/ttyAMA0 STATUS

게이트웨이 출력에는 각 PN5180에 대해 별도의 READER 행이 포함됩니다. 프로토콜별 필드는 ISO 14443A 또는 ISO 15693 태그가 감지되었는지를 나타내고 UID를 표시합니다.

게이트웨이 명령과 상태 출력에 대한 자세한 내용은 다음에서 확인할 수 있습니다: PN5180 Pico Gateway documentation.

리더 준비

수동 테스트를 수행하는 동안 일반 ABR 서비스가 게이트웨이에 접근하지 않도록 서비스를 중지하십시오:

sudo systemctl stop abr-control-panel.service

NFC 리더 어셈블리 위의 내부 커버를 제거하여 릴레이 보드의 안테나 튜닝 커패시터에 접근합니다.

초기 테스트에서는 C1 위치에 18 pF 커패시터를 장착하고 C2는 장착하지 않은 상태로 둡니다. C1과 C2는 병렬로 연결되므로 전체 튜닝 커패시턴스는 두 값의 합입니다.

장치가 꺼져 있고 전원 공급 장치에서 분리된 상태에서만 커패시터를 납땜하거나 교체하십시오.

초기 판독 거리 확인

튜닝 절차에는 ISO 14443A 태그 를 사용합니다. 테스트할 안테나로 둘러싸인 유리 패널 중앙에 태그를 대십시오. 태그는 유리와 평행하게 유지합니다.

장치의 전원을 켜고 게이트웨이 상태를 요청합니다. 두 리더를 테스트하려면 다음을 사용합니다:

python hardware/pn5180_gateway_client.py \
--device /dev/ttyAMA0 STATUS

태그를 유리 바로 위에 놓으면 감지되어야 합니다.

이제 태그를 유리 표면에 수직인 방향으로 유리 중앙에서 멀어지게 이동합니다. 측정하는 동안 태그는 유리와 평행하게 유지합니다.

거리를 약 1 cm씩 늘리고 각 단계 후에 리더 상태를 요청합니다. 태그가 더 이상 감지되지 않을 때까지 계속합니다. 감지가 여전히 안정적이었던 최대 거리를 기록합니다.

튜닝 커패시턴스 조정

부품을 변경하기 전에 장치를 끄고 전원에서 분리합니다.

C2 위치에 커패시터를 추가합니다. C1과 C2는 병렬로 연결되어 있으므로 초기 18 pF에 2 pF를 추가하면 전체 커패시턴스는 약 20 pF가 됩니다.

장치의 전원을 다시 켜고 전체 거리 테스트를 반복합니다. 이 커패시턴스에서의 최대 안정 판독 거리를 기록합니다.

2 pF씩 증가시키며 추가 C2 값에 대한 테스트를 계속합니다.

가장 긴 안정 판독 거리를 제공하는 커패시턴스를 선택합니다. 안테나를 적절히 튜닝했을 때 ISO 14443A 판독 거리는 약 8 cm였습니다.

ISO 15693 태그는 일반적으로 훨씬 더 긴 거리를 제공합니다. 태그와 안테나의 정렬 상태에 따라 15~20 cm를 초과하는 거리에서도 감지될 수 있습니다.

두 번째 리더에도 이 절차를 반복합니다. 두 안테나의 튜닝이 완료되면 내부 NFC 커버를 다시 설치하고 ABR 서비스를 재시작합니다:

sudo systemctl start abr-control-panel.service





STEP 20. 전체 시스템 테스트


카메라 보정과 NFC 안테나 튜닝을 완료한 후 인클로저를 영구적으로 닫을 수 있습니다.

유리 패널의 양면을 조심스럽게 청소하고 스캐너 내부의 먼지를 제거합니다. 모든 케이블과 안테나 와이어가 올바르게 배선되어 있으며 외부 인클로저 부품에 끼이지 않는지 다시 한 번 확인합니다.

목재 색상의 front2back2 부품을 설치하고 적절한 나사로 고정합니다. 이 외부 부품은 유리 패널의 가장자리와 겹쳐 패널이 빠지지 않도록 합니다. 이제 기계적 조립이 완료되었습니다.

판독 테스트 수행

ABR 서비스가 실행 중인지 확인합니다. 재시작 후에는 서비스가 실행 중이어야 합니다. 다음과 같이 상태를 테스트할 수 있습니다:

systemctl is-active abr-control-panel.service

NFC 태그가 부착된 책을 스캐너 위에 놓고 시작 버튼을 누릅니다.

이미지 캡처, OCR 및 오디오 준비 중에는 장치에서 주기적인 하트비트 차임이 재생됩니다. 이는 명령이 수락되었고 처리가 계속 진행 중임을 확인해 줍니다.

처리가 완료되면 장치가 내장 스피커를 통해 인식된 텍스트를 읽기 시작합니다.

다음 사항을 확인합니다:

  1. 두 페이지가 모두 올바른 순서로 캡처되고 읽힙니다.
  2. 음성으로 읽히는 텍스트가 인쇄된 페이지의 내용과 일치합니다.
  3. 볼륨 조절이 올바르게 작동합니다.
  4. 시작 버튼을 다시 누르면 재생이 중지됩니다.
  5. 충분한 페이지가 스캔되면 두 요약 버튼이 모두 예상한 음성 요약을 제공합니다.

장치가 예상대로 작동하지 않으면 서비스 상태와 최근 로그 메시지를 확인합니다:

systemctl status abr-control-panel.service --no-pager -l

journalctl -u abr-control-panel.service \
-n 100 \
--no-pager

이 테스트가 성공적으로 완료되면 Accessible Book Reader를 정상적으로 사용할 수 있습니다.




STEP 21. Accessible Book Reader 사용


Accessible Book Reader 사용


Accessible Book Reader는 몇 가지 촉각식 조작부만 사용하여 작동합니다.

  1. 양면 펼침 페이지 읽기: 펼친 책을 스캐너 위에 놓고 Start 버튼을 누릅니다. 장치가 두 페이지를 모두 캡처하고 처리 후 읽기 시작합니다. 재생을 중지하려면 Start 버튼을 다시 누릅니다.
  2. 책 식별: 책의 표지 안쪽에는 NFC 태그가 부착되어 있어야 합니다. ISO 14443A 및 ISO 15693 태그를 모두 지원하지만, 더 긴 판독 거리와 높은 신뢰성 때문에 ISO 15693 태그를 권장합니다.
  3. 볼륨 조절: 오디오가 재생되는 동안 EC11 로터리 컨트롤을 돌립니다.
  4. 지금까지의 이야기 – 요약 1: 지금까지 스캔한 책 내용을 시간순으로 요약하려면 Summary 1을 누릅니다. 완료된 각 섹션의 요약이 결합되고 압축되어 음성 개요로 제공됩니다.
  5. 최근 페이지 – 요약 2: 요약 2를 누르면 책에서 가장 최근에 읽은 부분이 요약됩니다. 장치는 가장 최근에 완료된 섹션과, 해당 섹션 이후 스캔된 페이지가 있는 경우 그 페이지들을 사용합니다. 첫 번째 섹션이 완료되기 전에는 사용 가능한 텍스트로 임시 요약을 생성할 수 있습니다.
  6. 책에 저장된 모든 데이터 삭제: 태그가 부착된 책을 스캐너에 놓고 Start, Summary 1 및 Summary 2 버튼을 동시에 누릅니다. 음성 안내를 따릅니다. EC11 볼륨 노브를 눌러 삭제를 확인하거나, 기능 버튼 중 하나를 눌러 취소합니다.

책을 삭제하면 스캔된 페이지, 읽기 기록 및 요약이 제거됩니다. 이는 책을 처음부터 다시 스캔하고 새롭고 일관된 페이지 순서로 요약 데이터를 다시 구축하려는 경우에 유용합니다.

클라우드 서비스 비용

Accessible Book Reader는 두 가지 유료 클라우드 서비스를 사용합니다. 음성 오디오 생성에는 Google Cloud Text-to-Speech를, 요약 생성에는 Google Gemini를 사용합니다.

Google Cloud TTS의 표준 음성은 문자 100만 자당 USD 4의 비용이 듭니다. 책의 한 페이지당 평균 약 2,500자라고 가정하면, 이는 무료 제공량을 사용한 후 페이지당 약 USD 0.01 에 해당합니다.

매월 첫 400만 자는 무료이며, 이는 약 월 1,600페이지에 해당합니다. 따라서 대부분의 개인 사용자는 월간 무료 제공량을 초과할 가능성이 낮습니다. 요약 및 기타 생성 음성에 사용되는 텍스트도 문자 수에 포함됩니다. 그럼에도 Google Cloud 프로젝트에서 결제를 활성화해야 합니다. 자세한 내용은 최신 Google Cloud Text-to-Speech 가격 정보 를 참조하세요.

Gemini 사용량은 선택한 모델과 처리된 입력 및 출력 토큰 수에 따라 별도로 청구됩니다. 비용은 스캔된 텍스트의 양과 요약 요청 빈도에 따라 달라지므로 페이지당 고정 비용으로 나타낼 수 없습니다. 서비스를 설정하기 전에 최신 Vertex AI 가격 정보 를 확인하세요.

클라우드 가격과 무료 제공량은 시간이 지나면서 변경될 수 있습니다.




STEP 22. 결론 및 향후 개선 사항


이 프로젝트의 목표는 시각장애인 또는 시력이 약한 사람이 독립적으로 조작할 수 있는 신뢰성 높은 독서 장치를 만드는 것이었습니다. Accessible Book Reader는 간단한 촉각 인터페이스, 자동 책 식별, 이미지 캡처부터 음성 오디오 생성까지 대부분 자동화된 프로세스를 통해 이 목표를 달성합니다.

이 장치는 안정적으로 작동하며, 정상적인 조건에서 OCR 시스템은 비교적 적은 인식 오류를 냅니다. 따라서 간단한 조작, 신뢰할 수 있는 페이지 인식, 우수한 음성 출력이라는 핵심 개발 목표를 달성했습니다.

아직 개선의 여지는 있습니다. 현재는 Start 버튼을 누른 후 오디오 재생이 시작될 때까지 약 25초 가 걸립니다. 하트비트 차임이 처리가 아직 진행 중임을 알려 주므로 실제 사용에서는 특히 문제가 되지 않습니다. 그럼에도 이 지연 시간을 줄이면 사용자 경험이 향상될 것입니다. 현재 가장 큰 제약은 이미지 준비 및 OCR 처리 중 Raspberry Pi 5의 처리 성능입니다.

Google Cloud TTS 백엔드는 선택한 표준 음성을 사용해 명확하고 자연스러운 음성을 제공합니다. 테스트 결과, 음질은 평가한 오프라인 TTS 솔루션보다 눈에 띄게 우수했습니다. 현재는 더 자연스러운 클라우드 음성도 제공되지만, 운영 비용이 상당히 높아 이 애플리케이션에서 사용하기에는 정당화하기 어렵습니다. 따라서 ABR은 계속해서 비용 효율적인 표준 음성을 사용합니다.

오픈 소스 및 오픈 하드웨어

Accessible Book Reader는 오픈 소스 및 오픈 하드웨어 프로젝트입니다. 제 목표는 인쇄된 책에 더 쉽게 접근할 수 있도록 하고, 이 작업을 통해 시각장애인과 시력이 낮은 사람들의 일상생활을 개선하는 데 기여하는 것입니다.

누구나 설계를 살펴보고, 장치를 제작하며, 개선 사항을 기여할 수 있습니다. 모든 소프트웨어, 펌웨어, 전자 회로, 기계 설계 파일 및 문서는 GitHub 저장소에서 제공됩니다.

프로젝트를 복제, 수정 또는 배포하기 전에 저장소의 라이선스 정보를 검토해 주세요. 공개 라이선스는 상업적 이용을 허용하지만, 배포되는 파생물에는 카피레프트 의무가 적용됩니다. 또한 별도의 상업용 라이선스 계약과 향후 개발 협력에 대해서도 논의할 의향이 있습니다.

이 프로젝트가 유용한 장치를 제공하는 동시에, 접근 가능한 독서 기술을 더욱 발전시키기 위한 실용적인 기반이 되기를 바랍니다.

회사명 공방유니언 주소 각 공방 주소 참조
사업자 등록번호 0000 대표 공방유니언 전화 019-60105846 팩스 0000 이메일 gongbangunion@gmail.com
통신판매업신고번호 0000 개인정보관리책임자 공방유니언
Copyright © 2017 공방유니언. All Rights Reserved.