BLE 기능을 사용하는 앱을 설계하며 블루투스와 BLE는 이름만 비슷한 다른 방식이라는 것을 알게 되었다. 블루투스(Bluetooth)우선 블루투스(Bluetooth)는 버전별로 아래와 같은 차이가 있다. BT 1.x 버전은 가장 초기에 나온 1.0부터 2002년에 등장한 1.1을 거쳐 1.2까지 개선하였다.1.0 버전에는 블루투스 기기에서 볼륨 조절 등을 가능하게 해주는 AVRCP 기능 포함하여 출시되었다. 하지만 1.0 버전은 초창기 규격으로 속도나 안정성의 문제가 있었다. 대표적으로 2.4Ghz의 주파수를 사용하고 무선 랜(802.11b/g)도 2.4Ghz대의 주파수를 같이 사용하므로 동시 사용에 따른 충돌 관련 문제 등이 있다. 이후 1.1 버전~1.2 버전 업데이트를 통해 안정성과 보안 그리고..
블러링(Blurring) 이미지 블러링(Blurring)이란 이미지의 고주파 부분을 조금 더 자연스럽게 바꾸어줄 수 있는 방법이다. 이를 이해하기 위해 주파수에 대한 설명이 필요하다. 영상에서 고주파는 이미지의 색의 차이가 큰 부분이고, 저주파는 색의 차이가 적은 부분을 의미한다. 또한 상대적 고주파만 통과시키기 위한 LPF(Low Pass Filter)와 상대적 저주파를 제거해주기 위한 HPF(High Pass Filter)가 있는데, 블러링은 LPF를 통해 고주파에 해당하는 부분을 매끈하게(smoothing) 하게 보이도록 만드는 효과를 낸다. 사실 이미지 상에서 픽셀의 값은 공간적으로 느리게 변한다. 따라서 픽셀 간의 상관관계(correlation)가 크다. 이를 Slow Spatial Variat..
주요 개념 데이터 증대(Data Augmentation) Salt Pepper 노이즈 이미지 분류 수행을 위한 딥러닝 모델을 만들 때 항상 학습시킬 데이터가 부족하다. 라벨링도 굉장히 귀찮다. 따라서 데이터 증대(Data Augmentation) 작업을 통해 데이터 양을 늘려주는 것이 중요하다. 마구잡이로 오목렌즈, 볼록렌즈 효과 등을 사용해 데이터를 왜곡하기보단 지금 소개할 Salt Pepper 노이즈를 추가하거나 블러링(Blurring), 반전(Flip)과 화질 저하와 같은 여러 방법을 통해 데이터 증대를 수행할 수 있다. 물론 데이터 특성(feature)에 맞는 방식을 채택해야 한다. 만약 OCR을 수행해야하는데 5를 상하 반전하여 된 데이터셋을 사용하면 2와 혼동될 수 있어 원하지 않는 결과가 나..
기하학적(Geometric) 변환 기하학적(Geometric) 변환에서 어파인(Affine) 변환과 원근(or 투시, Perspective) 변환 그리고 리매핑(Remapping)이 있다. 여기서 어파인 변환과 투시 변환은 아래와 같은 차이가 있다. 어파인 변환 - 변환 결과가 평행사변형 형태 - 이미지의 끝 점 3개의 이전 위치와 변환 후의 위치를 알면 이동 관계를 알 수 있음 => 평행 사변형에서 점 3개를 알면 나머지 점의 위치 또한 알 수 있기 때문에 점 3개 투시 변환 (Perspective Transformation) - 어파인 변환보다 자유도가 높은 변환 - 이미지의 끝 점 4개의 이전위치와 변환 후의 위치를 알면 이동 관계를 알 수 있음 => 평행 사변형이 아닌 좀 더 자유로운 사각형이므로..
react-native를 하며 라이브러리에서 특정 메소드 또는 함수를 import 할 때 {}(중괄호) 안에 적어줄 때도 있고 그냥 메소드명만 표기할 때가 있는데, 예를 들어 아래와 같은 경우가 있다. import React, { useState, useEffect } from 'react'; React는 중괄호 없이 적었고, 상태 관리를 위한 Hook인 useState와 컴포넌트 랜더링 시 원하는 작업을 실행시키도록 도와주는 Hook인 useEffect는 중괄호 안에 메소드를 적었다. 이는 'react'라는 패키지 내부에서 어떻게 해당 메소드를 export 하는지에 따라 import시 표기하는 방법이 달라진다. 만약 아래와 같은 contextAPI가 있다고 가정한다. import React, { cre..
개발 중이던 앱은 푸시 알림을 받아 웹뷰를 보여주는 기능을 수행한다. 이때 푸시 알림은 가장 상위단에서 수신하고 url 정보 갱신한 후 하위 Home까지 props로 전달하고, 최종적으로 Home.js에서 useState를 이용해 url 변수를 갱신하여 rerender하는 구조를 계획하였다. 하지만 useState의 남용에 의해 아래 에러가 발생하였다. "Too many re-renders. React limits the number of renders to prevent an infinite loop." 해당 에러가 발생한 구조는 아래와 같다. // App.js import React, { useEffect, useState } from 'react'; import * as Notifications f..