Introduction


Overview

본 문서는 SELVAS AI의 수식 인식 솔루션인 Selvy Pen SDK for Math의 API 가이드입니다.
Selvy Pen SDK for Math는 손글씨로 수식을 입력하면 손글씨를 LaTeX으로 변환해 주는 솔루션입니다.
표준 C언어 기반의 라이브러리로써 Android, iOS, Tizen, Windows, Linux 등의 플랫폼을 지원하며, 그 외 플랫폼 및 Non-OS는 커스터마이징을 통해 지원이 가능합니다.

Specification

수학식
  • 중등 수학과정을 지원하는 87개 수식 심볼을 인식할 수 있습니다.
타입 심볼
1 Number \(0\;1\;2\;3\;4\;5\;6\;7\;8\;9\)
2 Latin Letter \(A\;B\;C\;D\;E\;F\;G\;H\;O\;P\)
\(a\;b\;c\;d\;e\;f\;g\;h\;i\;l\;m\;n\;p\;q\;r\;x\;y\;z\)
3 Greek Letter \(\pi\;\alpha\;\beta\;\gamma\;\theta\)
4 Binary Relation \(\lt\;\gt\;=\;\le\;\ge\;\neq\;\colon\;\pm\;\mp\;\because\)
5 Binary Operator \(+\;-\;\times\;\div\;\%\)
6 Arrow \(‾\;(\mathrm{overline})\)
7 Delimiter \(\;(\;)\;\{\;\}\)
8 Miscellaneous symbol \(√\;\angle\)
9 Names of functions \(\sin\;\cos\;\tan\)
10 Units \(\mathrm{m}\;\mathrm{mm}\;\mathrm{km}\;\mathrm{cm}\;\mathrm{g}\;\mathrm{kg}\;\mathrm{t}\;\mathrm{mL}\;\mathrm{L}\)
11 Etc. \(\ldotp\;\perp\;\triangle\;\Box\;\equiv\;\sim\;-(\mathrm{fraction})\;°\;,\;\prime\)
  • 분수, 루트, 제곱 등 7개의 수식 구조를 인식할 수 있습니다.
구조 예시
1 Horizontal pair horizontal pair \(2x\)
2 Fence fence \((1024+512)\)
3 Fraction fraction \(\dfrac{2x+4}{5y-2}\)
4 Square root square root \(\sqrt{144} + \sqrt{1728}\)
5 Subscript subscript \(x_i\)
6 Superscript superscript \(x^2\)
7 Overscript overscript \(\overline{AB}\)
화학식
  • 중등 과학과정을 지원하는 60개 심볼을 인식할 수 있습니다.
타입 심볼
1 Number \(0\;1\;2\;3\;4\;5\;6\;7\;8\;9\)
2 Latin Letter \(A\;B\;C\;D\;E\;F\;G\;H\;I\;K\;L\;M\;N\;O\;P\;R\;S\;T\;U\;V\;W\;X\;Y\;Z\)
\(a\;b\;c\;d\;e\;f\;g\;h\;i\;k\;l\;m\;n\;o\;p\;r\;s\;t\;u\;v\;y\)
3 Binary Operator \(+\;-\)
4 Arrow \(\rightarrow\)
5 Delimiter \(\;(\;)\;\)
  • 5개의 화학식 구조를 인식할 수 있습니다.
구조 예시
1 Horizontal pair horizontal pair \(Cl\)
2 Fence fence \((OH)\)
3 Subscript subscript \(Al_{2}\)
4 Superscript superscript \(Ca^{2+}\)
5 Subsuperscript subsuperscript \(SO_{4}^{2-}\)

Prerequisite

Touch Event

필기 입력 구현을 위해서는 다음과 같은 터치 이벤트 사양이 요구됩니다.

  • Touch Down : 펜을 터치 디바이스상에 처음 대는 순간 발생하는 이벤트
  • Touch Move : 펜을 터치 디바이스에서 떼지 않은 상태로 있을 경우 발생하는 이벤트
  • Touch Up : 펜을 터치 디바이스 상에서 떼는 순간 발생하는 이벤트
    Touch Down이 발생한 경우라면 항상 Touch Up이 발생하여야 합니다. 즉, 사용자가 필기 도중 터치 패드 영역을 벗어난 경우에도 드라이버에서는 Touch Up 이벤트를 발생시켜야 합니다.
Sampling Rate

'Sampling Rate’란 터치 디바이스에서 터치 이벤트를 체크하는 시간(or 양)을 말합니다.
필기 입력기 적용을 위해서는 보통 10~40ms(초당 25~100개의 터치 이벤트) 정도로 조정합니다.
유의할 점은 Sampling Rate가 40ms를 넘게 되면 필기한 모양이 자연스럽지 못하고 인식률도 떨어지게 됩니다. 대개의 경우 10~20ms를 권장합니다.

Delay time

인식 대기 시간은 필기 입력이 끝났다고 판단하는데 걸리는 시간입니다.
즉, 터치 디바이스에서 펜을 뗀 후 일정 시간 동안 필기 입력이 없으면, 사용자의 입력이 끝났다고 판단하고 인식 엔진을 호출하게 됩니다.
인식 대기 시간은 설정 메뉴를 통해 사용자가 적당한 값을 선택하도록 할 수도 있으며, 일반적으로 300~500ms의 값을 사용합니다.
물론, 인식 대기 시간을 활용하지 않고 버튼을 사용하여 시간에 관계없이 버튼을 클릭하면 바로 인식 엔진을 호출하도록 구현할 수도 있습니다.

Porting

Selvy Pen SDK for Math를 사용하기 위해 필요한 파일은 다음과 같습니다.

  • hdb/license_key/license.key는 플랫폼과 개발언어 상관없이 공통적으로 사용되는 파일입니다.
  • 그 외의 파일들은 플랫폼과 개발언어에 따라 파일 구성과 파일명이 다를 수 있습니다.
Selvy Pen SDK for Math - Windows/
│
├── hdb/
│   ├── ma_CF.hdb
│   └── ma_EX.hdb
│
├── include/
│   ├── dhwr.h
│   ├── dhwr_define.h
│   ├── dhwr_gesture.h
│   ├── dhwr_ink.h
│   ├── dhwr_result.h
│   └── dhwr_setting.h
│
├── libs/
│   ├── win32_x86/
│   │   ├── libspmath.dll
│   │   └── libspmath.lib
│   │
│   └── win32_x86_64/
│       ├── libspmath.dll
│       └── libspmath.lib
│
└── license_key/
    └── license.key
  • hdb/
    인식 엔진에서 사용하는 DB파일입니다.
    hdb 파일의 경로를 설정하는 API인 DHWRSetExternalResourcePath()를 호출 시 hdb 파일이 존재하는 디렉터리의 경로명을 파라미터로 입력합니다.
    • ma_CF.hdb : 화학식 인식을 위한 DB 파일
    • ma_EX.hdb : 수식 인식을 위한 DB 파일
  • include/
    API명과 enum 값 등이 선언되어 있는 헤더 파일입니다.
    dhwr.h 파일 하나만 include 하면 됩니다. (dhwr.h 내에서 나머지 헤더 파일을 include 합니다.)
  • libs/win32_x86/
    수식 인식 기능을 수행하는 32bit Main 엔진 라이브러리 파일입니다.
  • libs/win32_x86_64/
    수식 인식 기능을 수행하는 64bit Main 엔진 라이브러리 파일입니다.
  • license_key/license.key
    Main 엔진을 초기화는 API인 DHWRCreate()를 호출 시 License 파일명이 포함된 경로명을 파라미터로 입력합니다.
    Warning
    라이브러리를 사용하기 위해서는 License 파일이 필요합니다.
    License 파일이 없으면 수식 인식 기능은 동작하지 않습니다.
Selvy Pen SDK for Math - Windows/
│
├── hdb/
│   ├── ma_CF.hdb
│   └── ma_EX.hdb
│
├── src/
│   └── Hwr.cs
│
├── libs/
│   ├── win32_x86/
│   │   ├── libspmath.dll
│   │   └── libspmath.lib
│   │
│   └── win32_x86_64/
│       ├── libspmath.dll
│       └── libspmath.lib
│
└── license_key/
    └── license.key
  • hdb/
    인식 엔진에서 사용하는 DB파일입니다.
    hdb 파일의 경로를 설정하는 API인 SetExternalResourcePath()를 호출 시 hdb 파일이 존재하는 디렉터리의 경로명을 파라미터로 입력합니다.
    • ma_CF.hdb : 화학식 인식을 위한 DB 파일
    • ma_EX.hdb : 수식 인식을 위한 DB 파일
  • src/Hwr.cs
    API명과 Error Code값 등이 정의되어 있는 C# 소스 파일입니다.
  • libs/win32_x86/
    수식 인식 기능을 수행하는 32bit Main 엔진 라이브러리 파일입니다.
  • libs/win32_x86_64/
    수식 인식 기능을 수행하는 64bit Main 엔진 라이브러리 파일입니다.
  • license_key/license.key
    Main 엔진을 초기화는 API인 Create()를 호출 시 License 파일명이 포함된 경로명을 파라미터로 입력합니다.
    Warning
    라이브러리를 사용하기 위해서는 License 파일이 필요합니다.
    License 파일이 없으면 수식 인식 기능은 동작하지 않습니다.
Selvy Pen SDK for Math - Android/
│
├── hdb/
│   ├── ma_CF.hdb
│   └── ma_EX.hdb
│
├── src/
│   └── com/
│       └── selvy/
│           └── spmath/
│               └── DHWR.java
│
├── libs/
│   ├── android_armeabi-v7a/
│   │   ├── libspmath-base.so
│   │   ├── libspmath-core.so
│   │   ├── libspmath.so
│   │   └── libstlport_shared.so
│   │
│   └── android_arm64-v8a/
│       ├── libspmath-base.so
│       ├── libspmath-core.so
│       ├── libspmath.so
│       └── libstlport_shared.so
│
└── license_key/
    └── license.key
  • hdb/
    인식 엔진에서 사용하는 DB파일입니다.
    hdb 파일의 경로를 설정하는 API인 SetExternalResourcePath()를 호출 시 hdb 파일이 존재하는 디렉터리의 경로명을 파라미터로 입력합니다.
    • ma_CF.hdb : 화학식 인식을 위한 DB 파일
    • ma_EX.hdb : 수식 인식을 위한 DB 파일
  • src/com/selvy/spmath/DHWR.java
    API명과 Error Code값 등이 정의되어 있는 Java 소스 파일입니다.
  • libs/android_armeabi-v7a/
    수식 인식 기능을 수행하는 ARM 32bit CPU용 엔진 라이브러리 파일입니다.
  • libs/android_arm64-v8a/
    수식 인식 기능을 수행하는 ARM 64bit CPU용 엔진 라이브러리 파일입니다.
  • license_key/license.key
    Main 엔진을 초기화는 API인 Create()를 호출 시 License 파일명이 포함된 경로명을 파라미터로 입력합니다.
    Warning
    라이브러리를 사용하기 위해서는 License 파일이 필요합니다.
    License 파일이 없으면 수식 인식 기능은 동작하지 않습니다.