OpenCV 는 이미지 처리에 도움

 

yolov5 설치시 이미 같이 설치됨 원래같으면 설치 해야함

이미지 불러오기

이미지 띄우기 - 2가지 방법

  • matplotlib 사용

  • 이미지가 파란 이유 ? matplotlib 에선 이미지를 BGR로 이미지를 읽지만 불러올때는 RGB로 가져왔기 때문
  • img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
    • 이미지를 변환해줌

  • 흑백 변환시

 

  • 이렇게 opencv 로 이미지를 띄우면 번거롭다는 의견
  • 이미지의 0,0은 와측 상단이다

img = cv2.imread('cat.1502.jpg')
# 사각형 그리기
# 50, 70
# 250, 300
# 이미지, 좌상단좌표, 우하단좌표, 색상, 선크기
cv2.rectangle(img, (65,85), (245,280), (0,0,255), 3)
cv2.imshow('cat',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

이미지에 글자 넣기

 

 

 

 

영상 띄우기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 특성추출부와 분류부가 있는데 
  • 특성추출부만 사용할 것이다
    • 잘만들어진 특징을 잘 추출하는 모델의 특징 추출부만 가져옴
  • 분류부를 사용하지 않는 이유
    • 추출된 특징으로 사자와 호랑이를 

 

 

 

 

1등이 구글넷

2등이 VGG넷인데

2등 모델을 사용할 것이다

가벼워서

 

 

 

 

 

 

다른사람이 만든 모델의 특징추출부 가져오기

 

 

 

 

conv_base.summary() - 층 확인하기

 

 

 

 

 

 

우리가 할 수 있는건 Classification 은 할 수 있고, 

 

이제 할 건 Object Detection 이당

 

 

  • Yolo 모델 사용 (객체 탐지 모델)

 

위치 탐지

범위

거리파악 가능

 

  • 제일 어려운게 데이터 준비

 

 

우리가 앞으로 해야할 순서

  1. roboflow > 이미지 라벨링 사이트 > 1시간 30분
  2. 코랩에서 YOLO 학습하기 > 2시간
  3. jupyter notebook 에서 학습한 모델 사용해서 객체 인식하기(OpenCv) > 2시간

 

이미지라벨링 할 수 있는 사이트

  • 가입하기

 

 

 

 

 

 

 

두개 입력하고 create 

 

 

 

 

 

고양이 0~99 까지 총 100장 드래그 앤 드랍

강아지도 100장 옮기기

총 200장이 됨

 

save and Continue 클릭

 

오른쪽 하단 Assign Images 클릭

'

Start Annotating 클릭

200당 해주기

뒤로가기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

완료 화면

 

 

이화면이 나옴

터미널로 이동해서

코드 복사

 

 

 

새노트 생성

 

 

 

 

 

 

 

 

이미지의 위치를 나타내는 정보

0~1까지의 숫자

 

  1. 0 : 첫번째는 클래스
  2.  0.41171875 0.28125 0.55625 0.47109375 : 객체위치

가로 600 세로 450

 

 

데이터에 대한 설명

클래스 몇개인지

클래스 이름은 무엇인지

 

mv 명령어

  • 여러가지 매개변수를 받을 수 있다
  • 맨 마지막 /content/dataset 인 곳에 앞에 파일을 다 집어넣는다

 

  • yolo를 학습시키기 위해 train.py 파일 실행시킬것임
  • data.yaml 에 있는 데이터셋 정보를 알려줌
  • 여기 있으니 알아서 사용해
  • train : train 데이터 경로 (각 파일마다의 경로) 가 적힌 파일
  • train : content/dataset/train.txt 파일을 만듬

 

 

 

valid 도 똑같이 바꿔주기

 

 

이미지 경ㄹ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'수업 > 딥러닝' 카테고리의 다른 글

[10일차] OpenCV  (0) 2023.05.24
[딥러닝] 7일차 - 이미지 데이터 학습, 데이터 확장  (0) 2023.05.17
[딥러닝] 6일차 - cnn  (0) 2023.05.15
[딥러닝] 4일차 -  (0) 2023.05.10
[딥러닝] 3일차 - 다중분류 실습  (0) 2023.05.09

 

데이터 구글 드라이브에 옮기기

 

시간 좀 걸림

 

데이터를 확인해 보면 

 

개와 고양이 사진 데이터

  • train : 각 1000장 총 2000장
  • validation: 각 500장 총 1000장
  • test: 각 11장 총 22장

하나의 픽셀에 0~ 255 사이의 값이 하나 들어있음

흑백 (Gray) = 500 * 500 

컬러 (RGB) = (500 * 500 ) * 3

  • 이미지 학습이지만 실은 숫자 데이터 학습이다
  •  이미지 파일 받아오기(0 ~ 255 사이의 숫자로 이루어짐)
  •  해야할 일
    • 1. 한 변수에 전체 이미지 담기
    • 2. 크기 동일하게 만들어주기 (150, 150) (사진마다 크기가 제각각이기에)
    • 3. 라벨링
    • 4. 0 ~ 255(정수) > 0 ~ 1 (실수) > 분산을 줄이자
      • => 이대로 사용하면 문제가 발생 숫자가 큰게 더 중요한 걸 까 라고 생각할 수 있음
      • 때문에 의도와 다른 많은 가중치를 부여할 수 있음

 

이미지 데이터를 숫자화 시켜주는 라이브러리

 

 

 

 

 

런타임 끊겼다 다시 실행

 

 

특징 추출 부

  • conv 와 pool 은 한쌍이다 

 

분류부

 

학습방법 설정

 

학습

  • 입력층에서는 학습할게 많아서 오래걸리고 그 후부터는 빨라짐

 

  • 과대 적합이 발생

 

과대적합 시각화

 

 

컴퓨터가 특징을 찾는 방법

 

 

 

 

  • 데이터 수의 증가 -> 1000장 -> 10000장으로 늘리는 방법
    • 한계가 있기에 증가는 조금 어렵고 확장을 시켜본다.

 

 

데이터의 확장

  • 기존의 데이터를 변환해서 사용한다
  • 확장전의 데이터도 가지고 있다.
  • 기본기같은 느낌
  • 확장 전의 데이터로도 학습이 잘 되었으면 확장을 안해도 된다

 

순서는

  • 기본데이터로 먼저 학습
    • 결과가 좋다 -> 바로 사용
    • 결과가 안좋다 -> 확장데이터로 추가학습

 

 

모델 저장 방법, 모델 불러오기

  • 코랩 연결이 끊겼을 때 모델 날라간 경우 ㅠ
  • 혹시 모르니 저장해 놓자

데이터 확장 기능 추가

확장된 기능
기존 기능

 

  • 데이터가 없는 부분은 저렇게 주변의 데이터로 채움

 

 

 

과대적합 피하는 층 쌓기

  • 학습 할 때마다 특정 층들만 사용
  • 사용할 때마다 전체가 아닌 골라서 사용함
  • 특정 노드에 가중치가 몰리는 현상을 완화시켜줌

  • 30 % 는 사용하지 않음

단점

  • 학습할 때 속도가 느려짐
  •  

다음 시간은 전이학습 배울 예정

  • 다른 사람이 많은 데이터로 많은 층으로 잘 학습 시킨 모델 가져와서 약간 수정하고 사용하기

 

https://huggingface.co/models

 

Models - Hugging Face

 

huggingface.co

 

 

다른 사람이 만든 모델 올려놓는 사이트 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'수업 > 딥러닝' 카테고리의 다른 글

[10일차] OpenCV  (0) 2023.05.24
[딥러닝] 8일차 - 다른사람이 만든 모델 (cnn)  (0) 2023.05.18
[딥러닝] 6일차 - cnn  (0) 2023.05.15
[딥러닝] 4일차 -  (0) 2023.05.10
[딥러닝] 3일차 - 다중분류 실습  (0) 2023.05.09

volley 동작원리

  • 요청정보
    • 통신방식
    • url
    • 성공로직
    • 실패로직
  • 리퀘스트큐

 

 

 

 

 

 

 

 

 

 

내가 만든 서버로 넘기기 

새프로젝트 생성 - MyVolley02

 

 

앱 지우고 

서블렛으로 서버 만들기

 

결과

 

중요데이터는 POST 방식으로 보내야 한다

 

추가

            {
                // POST방식으로 데이터를 보내는 함수 getParams 작성 가능
                override fun getParams(): MutableMap<String, String>? {

                    // HashMap -> 보내고자 하는 데이터를 key - value 형태로 만들어줌
                    // HashMap<String, String> --> key : String, value : String
                    var params = HashMap<String, String>()
                    params.put("data","1232")
                    return params

                }
            }
  • post 방식으로 

 

 

 

 

 

 

정리

 

서버통신

1. 요청정보 만들기

(요청방식, 주소, 성공로직, 실패로직)

2. RequestQueue에 담아서 요청을 실행시킨다.

3. Get 방식으로 요청을 보낼때는 쿼리스트링 방식으로 데이터를 서버측으로 전달 할 수 있다.

4. POST 방식으로 요청을 보낼 때는 getParams라는 메소드를 만들어서 데이터를 서버측으로 전달 할 수 있다.

(HashMap 필수 --> 보내고자 하는 데이터를 key - value 형태로 만들어서 Params 객체에 저장해준다!)

5. 서버에서 다시 안드로이드로 응답을 보내줄 때는 get, post 둘 다 out객체(PrintWriter객체)를 통해서 응답을 보내준다.

(out.print("보내고자 하는 데이터"))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 이미지에서 특징추출
  • 추출된 특징만을 통해서 어떤이미지인지 판단
  • 사람도 어떠한 부분적인 걸로 판단한다.

 

 

모델의 구성

 

기존

  • Dense 층 : MLP= 멀티레이어퍼셉트론
    • 분석하는 역할
    • 1차원만 가능

CNN 

  • input -> conv -> pool
  • conv, pool 층이 추가됨
  • 특징 추출 부 
    • 특징추출 역할
    • conv (컨볼루젼)
      • 특징찾기
      • 1층에서는 크게 보이는 특징 찾음
        • 뾰족한 귀, 눈, 입, 존재성
      • 살아남은 특징중에서 다음층 conv 에서 찾는다.
        • 좀더 세부적인 모양 - 입의 길이,
      •  
    • pooling
      • 특징아닌것 삭제
  • 분류 부
    •  Dense
      • 나온 특징들로 분석

제일먼저 찾는 눈에 보이는 큰 특징

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

지난 실습 

view 별로 id, text  변경해주기

plain Text 뷰는 html 의 input 태그속성처럼 placeholder 속성처럼 주고싶다면

속성 검색창에 hint 라고 검색!

입력전에 띄워주고싶은 문구를 작성!

나는 ID라고 작성하였다.

보기처럼 연한 회색 글씨로 ID라고 바껴있는걸 확인 할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

양방향 통신

자동으로 돌아와 주세영

 

 

 

 

새프로젝트 생성 MyIntent3

 

 

 

 

 

 

 

 

 

어댑터 뷰

뷰 그룹 안의 뷰들이 똑같은게 반복적인 것

 

 

중간 매개체를 통해서 띄울 수 있다.

 

  • 상하 스크롤 가능
  • 많은 양의 데이터 표현하고자 할 때 많이 사용 됨

 

새 프로젝트 생성 - MyListView

 

  • Legacy > ListView 추가

array 하나 생성 - myList

 

화면구성으로 와서 속성 entries에 @array/myList 넣어준다.

 

 

 

 

 

 

 

 

 

 

 

 

 

실습하기

새액티비티 추가

 

package com.example.mylistview

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.EditText
import android.widget.ListView

class MainActivity2 : AppCompatActivity() {

    lateinit var editPlus : EditText
    lateinit var btnPlus : Button

    lateinit var myList: ListView
    lateinit var dataArray : MutableList<String> // 데이터 셋
    // 바로 띄울 수 없으니 중간 매개체 생성

    // 어댑터 : 데이터를 하나의 항목으로 만들어 주는 것
    lateinit var myAdapter : ArrayAdapter<String>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)

        editPlus = findViewById(R.id.editPlus)
        btnPlus = findViewById(R.id.btnPlus)

        myList = findViewById(R.id.myList)
        dataArray = mutableListOf()

        myAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, dataArray)

        myList.adapter = myAdapter
        btnPlus.setOnClickListener{
            var inputData = editPlus.text.toString()
            dataArray.add(inputData)
            // notifyDataSetChanged() : 어댑터 갱신
            myAdapter.notifyDataSetChanged()
        }
    }
}

 

 

뷰가 여러개인 어댑터형식

 

새 프로젝트 생성

새 화면 생성

 

 

height 를 wrap_content

한 줄의 형식 만들었다

  • lateinit

 

 

커스텀 어댑터가 필요하다

 

클래스 생성

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

액티비티

  • 사용자에게 보여주는 한 화면의 단위

서비스

  • 멜론같이 돌아가게 도와주는 역할

방송수신자

  • 안드로이드 상태감지

콘텐츠 제공자

  • 데이터를 저장할 수 있는 역할

인텐트

  • 중간역할
  • 액티비티끼리의 화면전환에 필요한 기술

 

 

Activity 개요

 

 

Activity 생명주기

  • 각각 생명주기에 대한 메소드들이 따로 존재
  • 같이 만들어 볼 예정

 

 

새 프로젝트 생성 - MyIntent

 

 

textView 수정

 

onCreate() 는 메인 함수 역할

AppCompatActivity()

onStart() onResume() 기능을 알아서 실행시킨다

 

tag 어디서 출력된건지 기재

msg 출력할 메시지 작성

 

 

출력 결과

 

코드 전체

package com.example.myintent

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {

    // AppCompatActivity --> 액티비티를 실행시킬 수 있는
    // 라이프 사이클과 관련된 메서드가 있다!
    private var Tag = "MainActivity"


    // onCreate() : xml에 있는 요소들을 클래스 파일에서 컨트롤 할 수 있도록 로딩해주는 역할
    // ---> 앱 실행시 단 한번만 실행되어진다!
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.d(Tag,"onCreate 실행")
    }

    // onStart() : 화면에 띄워질 정보를 메모리에 저장
    override fun onStart() {
        super.onStart()

        Log.d(Tag,"onStart 실행")
    }

    // 실질적으로 사용자에게 화면을 보여주는 역할
    // 사용자와 상호작용 할 수 있도록 만들어줌
    override fun onResume() {
        super.onResume()
        Log.d(Tag, "onResume 실행")
    }

    // 어플이 일시 정지 되었을 때
    // --> 사용자 의도와는 다르게 어플이 일시 정지 되었을 때
    override fun onPause() {
        super.onPause()
        Log.d(Tag, "onPause 실행")
    }

    // 사용자 임의로 앱을 정지 시켰을 때! -> 종료가 아님 메모리상에 남아있음
    // 앱을 다시 구동할 수 있기 때문에 백그라운드 상태로 만들어 준다.
    override fun onStop() {
        super.onStop()
        Log.d(Tag, "onStop 실행")
    }

    // 메모리에 저장되어 있던 내용을 찾아서
    // 다시 사용자에게 보여주는 순서(onStart -> onResume)를 실행시켜줌
    override fun onRestart() {
        super.onRestart()
        Log.d(Tag, "onRestart 실행")

    }

    // 앱을 종료 시킬 때 사용되어짐! --> 메모리에 내용을 지움!
    override fun onDestroy() {
        super.onDestroy()
        Log.d(Tag, "onDestroy 실행")
    }
}

 

Intent 

  • 묵시적 인텐트 : 어떤 액션을 통해서 받은 액티비티 자체를 실행
    • 액션이 많이 붙음
  • 명시적 인텐트 : 개발자가 만든 다른 액티비티로 전환시킬 수 있는 것
    • 개발자가 만든 것

 

새 액티비티 생성

실습

버티컬 레이아웃 추가 -> 마법봉 클릭 

버튼 세개 추가

각각 id와 text 변경해준다

 

코드작성

 

웹페이지 이동하기

 

원래 바로 실행안되는데 안드로이드 버전이 업그레이드 되면서 허용되게 되었다.

기존 코드로는 아래 코드를 추가해준다

 

 

에뮬레이터 앱삭제

  • 앱 꾸욱 누르고, 드래그해서 Uninstall에 넣기, 메시지 뜨면 OK 누르기

 

카메라 기능

 

권한 허용 받게끔 알림

 

 

 

명시적 인텐트

 

내가 만든 액티비티로 이동하기

 

 

 

새프로젝트 생성 - MyIntent2

로그인 실습

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts