진행하는 프로젝트에선 사진을 업로드 하면 OCR로 사진의 텍스트를 분석하여 서비스를 제공해주는 기능을 제공한다.
OCR를 연동하기 이전, 사용자가 사진을 업로드 할 수 있도록 다음과 같은 기능을 제공해야 했다.
- 카메라로 촬영하기
- 앨범에서 선택하기
해당 게시물에선 카메라 기능을 구현해 볼 생각이다.
원하는 기능을 구현하기 위해 찾아보던 중, expo에서 카메라 기능을 제공하는 것을 확인하였다!
공식 사이트는 이쪽~
사용을 위해 프로젝트 터미널에서 다음과 같이 입력한다.
npx expo install expo-camera
import { CameraView, useCameraPermissions } from "expo-camera";
1) 카메라 권한을 받아오기 위한 변수를 선언한다.
const [permission, requestPermission] = useCameraPermissions();
2) 권한을 요청하는 함수를 작성한다.
// 권한 상태 확인 및 요청 함수
const checkPermissions = async () => {
if (!permission) return; // 권한 정보가 없으면 리턴
if (permission.status !== "granted") {
// 권한이 거부되었을 때
if (!permission.canAskAgain) {
// 권한을 다시 물어볼 수 없을 때 설정을 엽니다.
Alert.alert(
"권한 필요",
"앱 설정에서 카메라 권한을 변경해주세요.",
[
{ text: "취소", style: "cancel" },
{
text: "설정 열기",
onPress: () => {
Linking.openSettings(); // 설정을 여는 기능
},
},
],
{ cancelable: false }
);
} else {
// 권한을 다시 요청할 수 있을 때
requestPermission();
}
}
};
useEffect(() => {
checkPermissions(); // 컴포넌트가 마운트될 때 권한 상태 확인
}, [permission]);
useEffect를 통해 컴포넌트 마운트 시 권한 여부를 물어보거나 판단한다.
앞서 import 한 CameraView를 작성해보자.
<CameraView
style={styles.camera}
facing={facing}
ref={cameraRef}
zoom={zoom}
animateShutter={true}
flash={flash}
>
차례대로 사용된 props에 대해 살펴본다.
위 Props 들을 이용해 다음과 같이 카메라를 구성할 수 있었다.

UI는 본인의 재량이니, 파이팅 하도록 하자!
이렇게 expo Camera 라이브러리를 이용해 카메라 기능을 구현하는 작업에 대해 알아보았다.
다음엔 갤러리 기능으로…슝슝