'분류 전체보기'에 해당되는 글 162건

  1. 2019.10.02 01. 프로젝트 기획
  2. 2019.08.06 OCR(optical character recognition)
  3. 2019.08.06 Unity Seminar week01 - gpu Instancing
  4. 2019.06.17 딥러닝 스터디03 - style transfer

statement

화면 속의 생명체는 우리가 그를 만지도록 유혹한다.
실제로 만질 수 없는 화면 속의 존재는 우리와의 접촉을 원한다.
우리는 디바이스의 도움을 통하여 복제된 손을 이용하여 그를 만진다. 

화면 속의 존재는 우리의 손짓에 따라서 반응한다. 
실제로 그를 만질 수 없지만, 우리는 마치 그와 직접 연결된 느낌을 받는다. 


keyword

시각적 촉각성, 외로움과 신체접촉, 가상환경의 대체 가능성


expression

촉각 용어들을 시각화하는 작업(촉각 용어 리스트 뽑기)
처음에는 안개에 가려져있다가, 만질수록 형체를 들어내는 생명체. 


'Project > TouchMe' 카테고리의 다른 글

10/6 procedural grid, physics and soft body(nvidia flux)  (0) 2019.10.08
10/5 procedural Mesh  (0) 2019.10.05
04. 10/3 softBody effect  (0) 2019.10.04
03. 10/2 physics & leapmotion SDK  (0) 2019.10.02
02. 기술 기획  (0) 2019.10.02
Posted by 도이(doi)
,

1. tutorial 따라서 가상환경 설치하기.



2. mkdir 디렉토리 설정 전에,

원하는 폴더 생성 이동해서 디렉토리 생성하기 


3. pytesseract homebrew 설치하기 

brew install tesseract


4. ocr script 생성한 디렉토리에 만듦. 

ocr script.py


5. script 작성 : bounding 박스로 위치 받아오는 링크



6. images 폴더 만들어서 image 넣어주고 스크립트의 image 이름 바꿔주기

'programming' 카테고리의 다른 글

Unity Seminar week01 - gpu Instancing  (0) 2019.08.06
Posted by 도이(doi)
,



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

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using System.Linq; 

 

//obj data class(위치, 크기, 회전값)

public class ObjData

{

    public Vector3 pos;

    public Vector3 scale;

    public Quaternion rot;

 

    //위치, 회전, 크기에 대한 정보 행렬 가져오기 

    public Matrix4x4 matrix

    {

        get

        {

            return Matrix4x4.TRS(pos, rot, scale);

        }

    }

    //현재 위치 저장 

    public ObjData(Vector3 pos, Vector3 scale, Quaternion rot)

    {

        this.pos = pos;

        this.scale = scale;

        this.rot = rot;

    }

}

 

//생성자 class

public class Spawner : MonoBehaviour

{

    public int instances; // obj 생성 개수 

    public Vector3 maxPos; // 생성 박스의 크기 

    public Mesh[] objMeshes; // obj의 형태 

    public Material[] objMats; // obj의 매트리얼 

 

    //batch 리스트 

    private List<List<ObjData>> batches = new List<List<ObjData>>();

    private List<int> MeshList = new List<int>();

    private List<int> MatList = new List<int>();

 

    void Start()

    {

        int batchIndexNum = 0;

        //현재 objdata 리스트를 새로운 objdata리스트에 저장

        List<ObjData> currBatch = new List<ObjData>(); 

        for(int i=0; i<instances; i++)

        {

            AddObj(currBatch, i); //objData리스트 넘버링 

            //objData리스트의 형태 : [currBatch, 1], [currBatch, 2]...

            batchIndexNum++;

 

            //batchIndexNum이 1000을 주기로 batches리스트에 새로운 objData 리스트를 추가

            //(리스트의 열이 늘어나는 것으로 생각)

            if(batchIndexNum >= 1000)

            {

                batches.Add(currBatch);

                currBatch = BuiildNewBatch();

                batchIndexNum = 0;

            }

        }

        

        for(int i=0; i<batches.Count; i++)

        {

            int objMeshIndex = Random.Range(0, objMeshes.Length);

            int objMatIndex = Random.Range(0, objMats.Length);

            MeshList.Add(objMeshIndex);

            MatList.Add(objMatIndex);

        }

        

    }

 

    void Update()

    {

        RenderBatches();

    }

 

    //위치 지정 

    private void AddObj(List<ObjData> currBatch, int i) 

    {

        Vector3 position = new Vector3(Random.Range(-maxPos.x, maxPos.x), Random.Range(-maxPos.y, maxPos.y), Random.Range(-maxPos.z, maxPos.z));

        currBatch.Add(new ObjData(position, new Vector3(222), Quaternion.identity));

    }

 

    private List<ObjData> BuiildNewBatch()

    {

        return new List<ObjData>();

    }

 

    //object를 그리는 

    private void RenderBatches()

    {

        //fixed

        //for(int i=0; i<batches.Count; i++)

        //{

        //    Graphics.DrawMeshInstanced(objMeshes[MeshList[i]], 0, objMats[MatList[i]], batches[i].Select((a) => a.matrix).ToList());

        //    //batches[i] 즉, batch 안에 있는 원소들을 개별적으로 선택해서 matrix연산(matrix행렬로 변환)을 적용시킨 후, list로 변환. 

        //}

 

        //random

        foreach(var batch in batches)

        {

            Graphics.DrawMeshInstanced(objMeshes[Random.Range(0, objMeshes.Length)], 0, objMats[Random.Range(0, objMats.Length)], batch.Select((a) => a.matrix).ToList());

        }

    }

}

 

Colored by Color Scripter

cs


*material - 'enable instancing' chk

'programming' 카테고리의 다른 글

OCR(optical character recognition)  (0) 2019.08.06
Posted by 도이(doi)
,

스타일 트랜스퍼(style transfer) 

 CNN(convolutional neural network) 


스타일 트랜스퍼(style transfer)?

스타일 이미지를 학습시킨 후에, 콘텐츠 이미지에 적용시키는 것. 

ex) 반고흐 이미지를 스타일 이미지로 정함. 
반고흐 이미지를 내 얼굴 사진의 스타일을 바꾸는 필터로 사용하는 것을
스타일 트랜스퍼라고 이해할 수 있다. 

CNN(convolutional neural network : 합성곱 신경망)?

머신러닝을 사용할 때 어떤 식으로 학습시킬지 미리 graph를 설계한다. 

CNN은 model의 설계 방식 중 하나라고 생각하면 된다.

CNN의 특징은 학습시킬 대상의 특징을 가져온다. 


Neural Network란?


튜토리얼에서 사용하는 Neural Network 모델은 vgg16이다. 

vgg16은 16개의 레이어로 구성된 CNN(합성곱 신경망)이다.

스타일 이미지와 콘텐츠 이미지의 loss(손실) 값을 줄여서
두 이미지의 차이를 줄여 콘텐츠 이미지에 스타일을 적용시키기 위해서 사용된다. 


과정

<전처리>
  • 라이브러리 import
  • 이미지 전처리 (생략) 
<머신러닝>
  • 손실함수 만들기(MSE)
    • 콘텐츠 손실함수
    • 스타일 손실함수 (gram matrix)
    • 노이즈 제거 손실함수 
  • 스타일 트랜스퍼 알고리즘
    • 손실함수에 gradient descent(기울기) 적용
    • 손실함수 정규화 

<실행>
  • 콘텐츠, 스타일 이미지 가져오기
  • 콘텐츠 레이어 아이디 지정 
  • 스타일 레이어 아이디 지정(하위 레이어 / 상위 레이어)
  • 스타일 트랜스퍼 실행 (손실함수 최적화)

그람행렬 - 자기 자신에 전치행렬(90 돌린) 곱한

사용이유는 스타일에만 집중할 있도록 하기 위해서이다. 컨텐츠에는 적용되지 않는다.


손실함수는 컨텐츠 이미지와 mixed이미지 손실을 MSE를 사용해서 구한다.


Session은 




Reference

https://www.youtube.com/watch?v=YoBEGQD3LCc

Posted by 도이(doi)
,