월요일은 쉬었고 오늘 다시 해보자
일단 생각보다 앱에서 작업하는 양이 많고 처음보는 작업들이 많다...
https://webnautes.tistory.com/1590
AWS Rest API를 Android와 연동해보기( Lambda + API Gateway + DynamoDB )
AWS의 Lambda + API Gateway + DynamoDB를 사용하여 구현한 Rest API를 안드로이드 앱과 연동해본 예제입니다. 익숙하지 않은 분야라 이상한 점이 있을 수 있습니다. 2021. 11. 29 - 최초작성 본 포스트는 다음처
webnautes.tistory.com
- 안드로이드
일단 안드로이드 xml에 인터넷 사용 권한을 추가해줬고
themes.xml 에 타이틀바를 보이지 않게 하는 코드를 추가했다.
간단한 작업이여서 따로 스샷은 안찍었음
그리고 아래로 내려보면 recyclerview 를 사용하는데 이게 뭔지좀 살펴봤다.
https://developer.android.com/guide/topics/ui/layout/recyclerview?hl=ko#plan-your-layout
RecyclerView로 동적 목록 만들기 | Android 개발자 | Android Developers
RecyclerView로 동적 목록 만들기 Android Jetpack의 구성요소 RecyclerView를 사용하면 대량의 데이터 세트를 효율적으로 표시할 수 있습니다. 개발자가 데이터를 제공하고 각 항목의 모양을 정의하면 R
developer.android.com
동적 목록이라고 하는데
나는 일단 반환할 값이 1개이고
최종적으로 만드려는것이 이미지 파일 반환이기 때문에
그냥 텍스트뷰로 일단 해보자
그리고 빌드그래들 파일에 okhttp3 관련을 추가해줬고
그다음에 PersnalData.java 와 UserAdapter.java 파일이 나와있는데
이 파일들중에서 PersnalData.java 가 왜 필요한지 모르겠다.
그냥 넣어주면 안되는건가?
UserAdapter.java 파일은 ArrayList에 있는 PersnalData 타입의 데이터를 recyclerview 에 보여주는 작업을 한다고 하는데
나는 그냥 텍스트뷰 쓸꺼니까 얘는 필요 없을것 같고
mainactivity.java 파일이 좀 많이 복잡한데
일단 오브젝트들을 다 찾아줬고
내용중에 task.execute() 형식을 처음봐서 한번 알아봤다.
https://itmining.tistory.com/7
[안드로이드] AsyncTask란? (개념 및 사용법)
이 글은 PC 버전 TISTORY에 최적화 되어있습니다. 서론 안드로이드에서 UI를 조작할 수 있는 방법에 대해서 두 가지를 배웠습니다. Handler와 Looper 사용하기 runOnUiThread( ) 사용하기 두 가지 사용법
itmining.tistory.com
봐도 뭔소린지 잘 모르겠다.
뭔가 단일 스레드 실행에 있어서 효과적인 부분인가?
느낌은 오는데 정확히 뭐다라고는 잘 모르겠음
어쨌든
나는 결과 보기를 누르면
한 함수 안에서 전송api 한번 실행하고 수신api 한번 실행하는 거니까
음... 함수 안에 다른 함수를 넣는 식으로 구현해보자
일단 필요한 부분들을 가져오는데 첫번째 문제가 발생
okhttp3 가 추가가 안됨
[Android] Okhttp3 사용하여 네트워크 통신 하기
OkHttp는 기본적으로 효율적인 HTTP 클라이언트이다. 쉽게 HTTP 기반의 request/response를 할 수 있도록 도와주는 오픈소스 라이브러리이다. 동기, 비동기 방식을 각각 제공하여 개발자가 선택하여 개발
velog.io
찾아보니 라이브러리 추가를 해줘야 하는것 같다
블로그 따라서 라이브러리를 추가해줬다.
쭉 코드를 적용시키다가 발생한 두번째 문제
PersonalData 를 여기서 쓰나본데
왜 쓰는지 모르겠는데...
일단 대충 만들어봤다.
그리고 앱을 빌드하려는데 세번재 문제 발생
뭔소린지 모르겠다
찾아보니까 리소스파일이 없어서 생기는 오류라는데??
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=phj99&logNo=222134048594
Execution failed for task ':app:mergeDebugResources' 에러 해결
안드로이드 스튜디오를 빌드 했을 때, Execution failed for task ':app:mergeDebugResources'...
blog.naver.com
뭐 들어가는게 없는데...?
다시 빌드하니깐 된다?
ㅋㅋ
대충 값을 넣고 돌리면?
에러라는데
일단 로그를 보니까 데이터를 넣는건 성공한거같은데
불러오는데 실패한것 같다
ㅇㅇ GetData 에서 문제가 발생했다.
write data success 는 확인했고 dynamoDB에도 잘 기록되는걸 확인했다.
getdata 람다 함수에 이전에 테스트할때 입력했던 키가 잘못 입력되어있어서
dynamoDB 테이블을 새로 만들고 이어줬다.
다시한번 해보자
왜 안돼냐 ㅅㅂ
일단 입력은 확실히 잘 된다.
이러고 코드를 수정하면서 몇번 더 해봤는데
갑자기 되버림 ㅇㅅㅇ...
근데 결과 textview 에 저렇게 함수 결과값이 나오게 되는데
일단 저 창을 키워봤다
데이터삭제까지 깔끔하게 되는 모습!
- pixel.py 코드 분석
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# coding:utf-8
import sys
import cv2
from PIL import Image
import numpy as np
n8 = np.array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]],
np.uint8)
n4 = np.array([[0, 1, 0],
[1, 1, 1],
[0, 1, 0]],
np.uint8)
def make_dot(src, k=3, scale=2, color=True, blur=0, erode=0, alpha=True, to_tw=True):
img_pl = Image.open(src)
if (img_pl.mode == 'RGBA' or img_pl.mode == 'P') and alpha:
if img_pl.mode != 'RGBA':
img_pl = img_pl.convert('RGBA')
alpha_mode = True
elif img_pl.mode != 'RGB' and img_pl.mode != 'L':
img_pl = img_pl.convert('RGB')
alpha_mode = False
else:
alpha_mode = False
img = np.asarray(img_pl)
if color and alpha_mode:
a = img[:, :, 3]
img = cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)
h, w, c = img.shape
elif color:
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
h, w, c = img.shape
else:
img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
h, w = img.shape
c = 0
d_h = int(h / scale)
d_w = int(w / scale)
if erode == 1:
img = cv2.erode(img, n4, iterations=1)
elif erode == 2:
img = cv2.erode(img, n8, iterations=1)
if blur:
img = cv2.bilateralFilter(img, 15, blur, 20)
img = cv2.resize(img, (d_w, d_h), interpolation=cv2.INTER_NEAREST)
if alpha_mode:
a = cv2.resize(a, (d_w, d_h), interpolation=cv2.INTER_NEAREST)
a = cv2.resize(a, (d_w * scale, d_h * scale), interpolation=cv2.INTER_NEAREST)
a[a != 0] = 255
if not 0 in a:
a[0, 0] = 0
if color:
img_cp = img.reshape(-1, c)
else:
img_cp = img.reshape(-1)
img_cp = img_cp.astype(np.float32)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
ret, label, center = cv2.kmeans(img_cp, k, None, criteria, 10, cv2.KMEANS_PP_CENTERS)
center = center.astype(np.uint8)
result = center[label.flatten()]
result = result.reshape((img.shape))
result = cv2.resize(result, (d_w * scale, d_h * scale), interpolation=cv2.INTER_NEAREST)
if alpha_mode:
r, g, b = cv2.split(result)
result = cv2.merge((r, g, b, a))
elif to_tw:
r, g, b = cv2.split(result)
a = np.ones(r.shape, dtype=np.uint8) * 255
a[0, 0] = 0
result = cv2.merge((r, g, b, a))
colors = []
for res_c in center:
color_code = '#{0:02x}{1:02x}{2:02x}'.format(res_c[2], res_c[1], res_c[0])
colors.append(color_code)
return result, colors
|
cs |
이 코드의 make_dot 함수에서 도트그림이 만들어지는데
어떤 원리인지 차근차근 한번 보자
일단 np array 의 2차원 배열을 2개를 만들어 주는데
생김새가 3*3 에
하나는 꽉 차있고 하나는 모서리부분은 0으로 되어있는데 이게 밑에서
외곽선에 쓰인다. 아마 0으로 되있는 부분만 외각선으로 처리하는게 아닐까 싶음
이 부분에서 쓰이는데
일단 cv2.erode() 랑 cv2.bilateralFilter() 가 무슨 역할을 하는지 알아보자
erode 는 기존 객체의 영역을 깎아 내는 연산으로 객체 크기가 감소하는 함수라고 한다.
https://deep-learning-study.tistory.com/226
[파이썬 OpenCV] 영상의 모폴로지 - 침식과 팽창 - cv2.erode, cv2.dilate, cv2.getStructuringElement
황선규 박사님의 'OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝' 을 공부하면서 정리해 보았습니다. 예제 코드 출처 : 황선규 박사님 github홈페이지 『OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝』
deep-learning-study.tistory.com
그런데 모서리가 0인 2차원배열은 찾기가 힘들다
찾음
http://www.gisdeveloper.co.kr/?p=6529
Python과 OpenCV – 12 : Morphological Transformations – GIS Developer
이 글의 원문은 https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_morphological_ops/py_morphological_ops.html#morphological-ops 입니다. Morphological Transformations, 즉 형태변환은 흑과 백으로 구성된
www.gisdeveloper.co.kr
모폴로지에 대해서 여러 함수기능들을 정리해주신 블로그이다.
경우에 따라 사각형, 십자, 원형 배열을 사용한다고 한다.
그리고 bilateral filter 는 opencv 의 필터중 하나라고 하는데
https://eehoeskrap.tistory.com/125
[OpenCV] Bilateral Filter 적용하기
Bilateral Filter OpenCV에서 대표적인 필터로는 blur, GaussianBlur, medianBlur 그리고 BilateralFilter 가 있다. 이 필터는 선형으로 처리되지 않고, 엣지와 노이즈를 줄여주어 부드러운 영상이 만들어지게 된..
eehoeskrap.tistory.com
이미지를 부드럽게 해주는 효과라고 한다
이 글을 화요일날 쓰기 시작해서 지금 벌써 금요일이다...
좀 설렁설렁 하기도 했고
잘 안되는걸 계속 찾아가면서 하기도 해서 오래걸렸다...
시험공부 하면서 다시 좀 열씸히 만들어 보자
일주일간 저거 하나했네 ㅋㅋㅠㅠ
'Archive > [App] 도트감성:pixel painter' 카테고리의 다른 글
[3주-1일차] NFT maker APP - dynamoDB 이미지 파일 저장+불러오기 (0) | 2022.05.08 |
---|---|
[3주-0일차] NFT maker APP - 3주차 스프린트 계획 수립 (0) | 2022.05.07 |
[2주-1일차] NFT maker APP - 안드로이드 to AWS파이썬api서버 연동2 (0) | 2022.05.01 |
[2주-0일차] NFT maker APP - 2주차 스프린트 계획 수립 (0) | 2022.04.30 |
[1주-5일차] NFT maker APP - 안드로이드 to AWS파이썬api서버 연동 (0) | 2022.04.30 |