<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>sumin_lee_317.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Wed, 04 Sep 2024 08:45:55 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>sumin_lee_317.log</title>
            <url>https://velog.velcdn.com/images/sumin_lee_317/profile/4db7930f-519c-4037-9c0d-3249dcf149a8/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. sumin_lee_317.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/sumin_lee_317" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[퀵 정렬(Quick Sort)]]></title>
            <link>https://velog.io/@sumin_lee_317/%ED%80%B5-%EC%A0%95%EB%A0%ACQuick-Sort</link>
            <guid>https://velog.io/@sumin_lee_317/%ED%80%B5-%EC%A0%95%EB%A0%ACQuick-Sort</guid>
            <pubDate>Wed, 04 Sep 2024 08:45:55 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>⭐⭐⭐⭐⭐</p>
</blockquote>
<p>Quick Sort은 <strong><span style="color:red">분할정복(divide and conquer)</span></strong>을 통해 주어진 배열을 정렬한다.</p>
<blockquote>
<p><strong>※ 분할정복</strong>
문제를 2가지 작은 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략</p>
</blockquote>
<p><strong><span style="color:red">주어진 배열을 피벗(pivot)이라는 기준 요소를 중심으로 두 부분으로 나누고, 각각의 부분배열을 재귀적으로 정렬하여 전체를 정렬하는 알고리즘</span></strong>이다.</p>
</br>

<h3 id="gif로-이해하는-quick-sort">GIF로 이해하는 Quick Sort</h3>
<img src="https://engineering.fb.com/wp-content/uploads/2022/07/Hermes-quicksort.gif" alt="Quick Sort" style="width:400px; height:auto;">


</br>

<h3 id="접근방법">접근방법</h3>
<h4 id="1-피벗-선택">1. 피벗 선택</h4>
<p>배열 가운데서 하나의 원소(=피벗;pivot)를 고른다. 보통 첫번째 요소를 피벗으로 고른다. </p>
<h4 id="2-분할divide">2. 분할(Divide)</h4>
<p>배열을 둘로 나눈다. 이때, 값이 피벗보다 작으면 왼쪽에, 피벗보다 크면 오른쪽에 둔다.</p>
<p><code>pivot보다 작은 값</code> | <code>pivot</code> | <code>pivot보다 큰 값</code></p>
<img src="https://velog.velcdn.com/images/sumin_lee_317/post/adb3df8c-46d9-40e3-892b-14686559f7e1/image.png" style="width:400px; height:auto;">

<p>※ 분할을 마친 뒤 pivot은 더 이상 이동 X</p>
<h4 id="3-재귀적-정렬">3. 재귀적 정렬</h4>
<p>분할된 부분배열을 각각 정렬한다. (반복)</p>
<img src="https://miro.medium.com/v2/resize:fit:1200/1*-SvbPjyoV0NyGyfF5uZbEA.gif" style="width:400px; height:auto;">

<ol>
<li>부분배열의 첫 데이터를 pivot으로 둔다.</li>
<li><strong><span style="color:blue"><code>l</code></span></strong>은 왼<strong>→</strong>오 로 진행하며 피벗보다 크면 정지</li>
<li><strong><span style="color:red"><code>r</code></span></strong>은 왼<strong>←</strong>오 로 진행하며 피벗보다 작으면 정지</li>
<li><strong><span style="color:blue"><code>l</code></span></strong>와  <strong><span style="color:red"><code>r</code></span></strong> 를 swap</li>
<li>다시 <strong><span style="color:blue"><code>l</code></span></strong>은 왼<strong>→</strong>오 로 진행, <strong><span style="color:red"><code>r</code></span></strong>은 왼<strong>←</strong>오 로 진행하며</li>
</ol>
<h4 id="4-합병merge">4. 합병(Merge)</h4>
<p>각 부분배열이 정렬되면, 피벗과 합쳐서 전체배열을 정렬한다.</p>
</br>

<h3 id="java-code">Java Code</h3>
<pre><code class="language-Java"></code></pre>
</br>

<h3 id="시간복잡도">시간복잡도</h3>
<blockquote>
<p>비교횟수 = 재귀호출의 깊이 * 각 순환 호출 단계의 비교 연산</p>
</blockquote>
<h4 id="최선의-경우best-cases--tn--onlog₂n">최선의 경우(Best cases) : T(n) = O(nlog₂n)</h4>
<ul>
<li>재귀호출의 깊이: 분할할 때마다 배열이 반으로 나뉘므로 <code>(log₂n)</code></li>
<li>각 재귀호출단계의 비교연산: 각 단계마다 <code>(n)</code>번</li>
<li><strong><code>비교횟수 = n*log₂n</code></strong></li>
<li><strong><code>이동횟수 = 비교횟수보다 적으므로 무시</code></strong><img src="https://github.com/GimunLee/tech-refrigerator/raw/master/Algorithm/resources/quick-sort-002.png" style="width:100%; height:auto;">

</li>
</ul>
<h4 id="평균의-경우average-cases--tn--onlog₂n">평균의 경우(Average cases) : T(n) = O(nlog₂n)</h4>
<h4 id="최악의-경우worst-cases--tn--on²">최악의 경우(Worst cases) : T(n) = O(n²)</h4>
<ul>
<li>최악 = 이미 정렬된 경우, 매우 불균형하게 분할되는 경우</li>
<li>재귀호출의 깊이: <code>(n)</code></li>
<li>각 재귀호출단계의 비교연산: 각 단계마다 <code>(n)</code>번</li>
<li><strong><code>비교횟수 = n*n = n²</code></strong></li>
<li><strong><code>이동횟수 = 비교횟수보다 적으므로 무시</code></strong></li>
</ul>
<img src="https://github.com/GimunLee/tech-refrigerator/raw/master/Algorithm/resources/quick-sort-003.png" style="width:300px; height:auto;">

</br>

<h3 id="공간복잡도">공간복잡도</h3>
<p>주어진 배열 안에서 교환(swap)을 통해, 정렬이 수행되므로 <strong>O(n)</strong>이다.</p>
</br>

<h3 id="장점">장점</h3>
<ul>
<li>불필요한 데이터의 이동을 줄이고 먼 거리의 데이터를 교환할 뿐만 아니라, 한 번 결정된 피벗들이 추후 연산에서 제외되는 특성 때문에, 시간 복잡도가 O(nlog₂n)를 가지는 다른 정렬 알고리즘과 비교했을 때도 <strong>가장 빠르다.</strong></li>
<li>정렬하고자 하는 배열 안에서 교환하는 방식이므로, <strong>다른 메모리 공간을 필요로 하지 않는다.</strong></li>
</ul>
</br>

<h3 id="단점">단점</h3>
<ul>
<li>불안정 정렬(Unstable Sort) 이다.</li>
<li><strong>정렬된 배열에 대해서는</strong> Quick Sort의 불균형 분할에 의해 <strong>오히려 수행시간이 더 많이 걸린다.</strong></li>
</ul>
</br>

<hr>
<p><a href="https://moon1z10.github.io/development/quick-sort-algorithm/">참고</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[삽입정렬(Insertion Sort)]]></title>
            <link>https://velog.io/@sumin_lee_317/%EC%82%BD%EC%9E%85%EC%A0%95%EB%A0%ACInsertion-Sort</link>
            <guid>https://velog.io/@sumin_lee_317/%EC%82%BD%EC%9E%85%EC%A0%95%EB%A0%ACInsertion-Sort</guid>
            <pubDate>Wed, 04 Sep 2024 06:10:33 GMT</pubDate>
            <description><![CDATA[<p>손 안의 카드를 정렬하는 방법과 유사하다.</p>
<p>Insertion Sort는 Selection Sort와 유사하지만, 좀 더 효율적인 정렬 알고리즘이다.</p>
<p>Insertion Sort는 <strong><span style="color:red">2번째 원소부터 시작</span></strong>한다. 
<strong><span style="color:red">그 앞(왼쪽)의 원소들과 비교하여 삽입할 위치를 지정한 후, 원소를 뒤로 옮기고 지정된 자리에 자료를 삽입하여 정렬하는 알고리즘</span></strong>이다.</p>
<p>최선의 경우 O(N)이라는 엄청나게 빠른 효율성을 가지고 있어, 다른 정렬 알고리즘의 일부로 사용될 만큼 좋은 정렬 알고리즘이다.</p>
</br>

<h3 id="gif로-이해하는-insertion-sort">GIF로 이해하는 Insertion Sort</h3>
<p><img src="https://github.com/GimunLee/tech-refrigerator/blob/master/Algorithm/resources/insertion-sort-001.gif?raw=true" alt="Insertion Sort"></p>
</br>

<h3 id="접근방법">접근방법</h3>
<ol>
<li>정렬은 2번째 위치(index)의 값을 temp에 저장한다.</li>
<li>temp와 이전에 있는 원소들과 비교하며 삽입해나간다.</li>
<li>&#39;1&#39;번으로 돌아가 다음 위치(index)의 값을 temp에 저장하고, 반복한다.</li>
</ol>
</br>

<h3 id="java-code">Java Code</h3>
<pre><code class="language-Java">void insertionSort(int[] arr)
{
   for(int index = 1 ; index &lt; arr.length ; index++){ // 1.
      int temp = arr[index];
      int prev = index - 1;
      while( (prev &gt;= 0) &amp;&amp; (arr[prev] &gt; temp) ) {    // 2.
         arr[prev+1] = arr[prev];
         prev--;
      }
      arr[prev + 1] = temp;                           // 3.
   }
   System.out.println(Arrays.toString(arr));
}</code></pre>
<ol>
<li><p>첫 번째 원소 앞(왼쪽)에는 어떤 원소도 갖고 있지 않기 때문에, 두 번째 위치(index)부터 탐색을 시작한다. temp에 임시로 해당 위치(index) 값을 저장하고, prev에는 해당 위치(index)의 이전 위치(index)를 저장한다.</p>
</li>
<li><p>이전 위치(index)를 가리키는 prev가 음수가 되지 않고, 이전 위치(index)의 값이 &#39;1&#39;번에서 선택한 값보다 크다면, 서로 값을 교환해주고 prev를 더 이전 위치(index)를 가리키도록 한다.</p>
</li>
<li><p>&#39;2&#39;번에서 반복문이 끝나고 난 뒤, prev에는 현재 temp 값보다 작은 값들 중 제일 큰 값의 위치(index) 를 가리키게 된다. 따라서, (prev+1)에 temp 값을 삽입해준다.</p>
</li>
<li><p>&#39;2&#39;번 반복문이 끝난 뒤에는 indexMin에 &#39;1&#39;번에서 선택한 위치(index)에 들어가야하는 값의 위치(index)를 갖고 있으므로 서로 교환(swap)해준다.</p>
</li>
</ol>
</br>

<h3 id="시간복잡도">시간복잡도</h3>
<ul>
<li><p>최악의 경우(역으로 정렬되어 있을 경우) 
Selection Sort와 마찬가지로, <code>(n-1) + (n-2) + .... + 2 + 1 =&gt; n(n-1)/2</code> 즉, <strong>O(n²)</strong> </p>
</li>
<li><p>모두 정렬이 되어있는 경우(Optimal), 
한번씩 밖에 비교를 안하므로 <strong>O(n)</strong></p>
</li>
<li><p>이미 정렬된 배열에 하나씩 삽입/제거하는 경우
현실적으로 최고의 정렬 알고리즘이 됨, 탐색을 제외한 오버헤드가 매우 적기 때문이다.</p>
</li>
</ul>
<p><strong>최선의 경우는 O(n)</strong> 의 시간복잡도를 갖고, 
<strong>평균과 최악의 경우 O(n²)</strong> 의 시간복잡도를 갖게 된다.</p>
</br>

<h3 id="공간복잡도">공간복잡도</h3>
<p>주어진 배열 안에서 교환(swap)을 통해, 정렬이 수행되므로 <strong>O(n)</strong> 이다.</p>
</br>

<h3 id="장점">장점</h3>
<ul>
<li><p>알고리즘이 단순하다.</p>
</li>
<li><p>대부분의 원소가 이미 정렬되어 있는 경우, 매우 효율적일 수 있다.</p>
</li>
<li><p>정렬하고자 하는 배열 안에서 교환하는 방식이므로, 다른 메모리 공간을 필요로 하지 않는다. =&gt; 제자리 정렬(in-place sorting)</p>
</li>
<li><p>안정 정렬(Stable Sort) 이다.</p>
</li>
<li><p>Selection Sort나 Bubble Sort과 같은 O(n²) 알고리즘에 비교하여 상대적으로 빠르다.</p>
</li>
</ul>
</br>

<h3 id="단점">단점</h3>
<ul>
<li><p>평균과 최악의 시간복잡도가 O(n²)으로 비효율적이다.</p>
</li>
<li><p>Bubble Sort와 Selection Sort와 마찬가지로, 배열의 길이가 길어질수록 비효율적이다.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[선택정렬(Selection Sort)]]></title>
            <link>https://velog.io/@sumin_lee_317/%EC%84%A0%ED%83%9D-%EC%A0%95%EB%A0%ACSelection-Sort</link>
            <guid>https://velog.io/@sumin_lee_317/%EC%84%A0%ED%83%9D-%EC%A0%95%EB%A0%ACSelection-Sort</guid>
            <pubDate>Wed, 04 Sep 2024 05:48:50 GMT</pubDate>
            <description><![CDATA[<p>Selection Sort는 Bubble Sort과 유사한 알고리즘으로, <strong><span style="color:red">해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘</span></strong>이다.</p>
<p>Selection Sort와 Insertion Sort를 헷갈려하는 사람들이 종종 있는데, Selection Sort는 배열에서 <strong>해당 자리를 선택하고 그 자리에 오는 값을 찾는 것</strong>이라고 생각하면 편하다.</p>
</br>

<h3 id="gif로-이해하는-bubble-sort">GIF로 이해하는 Bubble Sort</h3>
<p><img src="https://github.com/GimunLee/tech-refrigerator/blob/master/Algorithm/resources/selection-sort-001.gif?raw=true" alt="Selection Sort"></p>
</br>

<h3 id="접근방법">접근방법</h3>
<ol>
<li>주어진 배열에서 최소값을 찾는다.</li>
<li>그 값을 맨 앞에 위치한 값과 교체한다. (pass)</li>
<li>맨 처음 위치를 뺀 나머지 배열을 같은 방법으로 교체한다. </li>
</ol>
</br>

<h3 id="java-code">Java Code</h3>
<pre><code class="language-Java">void selectionSort(int[] arr) {
    int indexMin, temp;
    for (int i = 0; i &lt; arr.length-1; i++) {        // 1.
        indexMin = i;
        for (int j = i + 1; j &lt; arr.length; j++) {  // 2.
            if (arr[j] &lt; arr[indexMin]) {           // 3.
                indexMin = j;
            }
        }
        // 4. swap(arr[indexMin], arr[i])
        temp = arr[indexMin];
        arr[indexMin] = arr[i];
        arr[i] = temp;
  }
  System.out.println(Arrays.toString(arr));
}</code></pre>
<ol>
<li><p>우선, 위치(index)를 선택해준다.</p>
</li>
<li><p>i+1번째 원소부터 선택한 위치(index)의 값과 비교를 시작한다.</p>
</li>
<li><p>오름차순이므로 현재 선택한 자리에 있는 값보다 순회하고 있는 값이 작다면, 위치(index)를 갱신해준다.</p>
</li>
<li><p>&#39;2&#39;번 반복문이 끝난 뒤에는 indexMin에 &#39;1&#39;번에서 선택한 위치(index)에 들어가야하는 값의 위치(index)를 갖고 있으므로 서로 교환(swap)해준다.</p>
</li>
</ol>
</br>

<h3 id="시간복잡도">시간복잡도</h3>
<p>데이터의 개수가 n개라고 했을 때,</p>
<ul>
<li><p>첫 번째 회전에서의 비교횟수 : 1 ~ (n-1) → n-1</p>
</li>
<li><p>두 번째 회전에서의 비교횟수 : 2 ~ (n-1) → n-2</p>
</li>
<li><p>...</p>
</li>
<li><p><code>(n-1) + (n-2) + .... + 2 + 1 → n(n-1)/2</code></p>
</li>
</ul>
<p>비교하는 것이 상수 시간에 이루어진다는 가정 아래, n개의 주어진 배열을 정렬하는데 <strong>O(n²)</strong> 만큼의 시간이 걸린다. <strong>최선, 평균, 최악의 경우 시간복잡도는 O(n²) 으로 동일</strong>하다.</p>
</br>

<h3 id="공간복잡도">공간복잡도</h3>
<p>주어진 배열 안에서 교환(swap)을 통해, 정렬이 수행되므로 <strong>O(n)</strong> 이다.</p>
</br>

<h3 id="장점">장점</h3>
<ul>
<li><p>Bubble sort와 마찬가지로 알고리즘이 <strong>단순</strong>하다.</p>
</li>
<li><p>정렬을 위한 비교 횟수는 많지만, Bubble Sort에 비해 실제로 교환하는 횟수는 적기 때문에 많은 교환이 일어나야 하는 자료상태에서 비교적 효율적이다.</p>
</li>
<li><p>Bubble Sort와 마찬가지로 정렬하고자 하는 배열 안에서 교환하는 방식이므로, 다른 메모리 공간을 필요로 하지 않는다. → 제자리 정렬(in-place sorting)</p>
</li>
</ul>
</br>

<h3 id="단점">단점</h3>
<ul>
<li><p>시간복잡도가 O(n²)으로, 비효율적이다.</p>
</li>
<li><p><strong>불안정 정렬</strong>(Unstable Sort) 이다.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[거품정렬 (Bubble Sort)]]></title>
            <link>https://velog.io/@sumin_lee_317/%EA%B1%B0%ED%92%88%EC%A0%95%EB%A0%AC-Bubble-Sort</link>
            <guid>https://velog.io/@sumin_lee_317/%EA%B1%B0%ED%92%88%EC%A0%95%EB%A0%AC-Bubble-Sort</guid>
            <pubDate>Wed, 04 Sep 2024 05:40:44 GMT</pubDate>
            <description><![CDATA[<p>Bubble Sort는 Selection Sort와 유사한 알고리즘으로 <strong><span style="color:red">서로 인접한 두 원소의 대소를 비교하고, 조건에 맞지 않다면 자리를 교환하며 정렬하는 알고리즘</span></strong> 이다.</p>
<p>정렬 과정에서 원소의 이동이 &#39;거품이 수면으로 올라오는 듯한 모습&#39;을 보이기 때문에 지어졌다고 한다.</p>
</br>

<h3 id="gif로-이해하는-bubble-sort">GIF로 이해하는 Bubble Sort</h3>
<p><img src="https://github.com/GimunLee/tech-refrigerator/blob/master/Algorithm/resources/bubble-sort-001.gif?raw=true" alt="Bubble Sort"></p>
</br>

<h3 id="접근방법">접근방법</h3>
<ol>
<li>1회전에 <code>원소1</code>와 <code>원소2</code>를, <code>원소2</code>와 <code>원소3</code>를, <code>원소3</code>와 <code>원소4</code>를, … 이런 식으로 <code>(마지막-1)번째 원소</code>와 <code>마지막 원소</code>를 비교하여 조건에 맞지 않는다면 서로 교환한다.</li>
<li>1회전을 수행하고 나면 가장 큰 원소가 맨 뒤로 이동하므로 2회전에서는 맨 끝에 있는 원소는 정렬에서 제외되고, 2회전을 수행하고 나면 끝에서 두 번째 원소까지는 정렬에서 제외된다. 이렇게 <strong>정렬을 1회전 수행할 때마다 정렬에서 제외되는 데이터가 하나씩 늘어난다.</strong></li>
</ol>
</br>

<h3 id="java-code">Java Code</h3>
<pre><code class="language-Java">void bubbleSort(int[] arr) {
    int temp = 0;
    for(int i = 0; i &lt; arr.length; i++) {       // 1.
        for(int j= 1 ; j &lt; arr.length-i; j++) { // 2.
            if(arr[j-1] &gt; arr[j]) {             // 3.
                // swap(arr[j-1], arr[j])
                temp = arr[j-1];
                arr[j-1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    System.out.println(Arrays.toString(arr));
}</code></pre>
</br>

<h3 id="시간복잡도">시간복잡도</h3>
<p>시간복잡도를 계산하면, <code>(n-1) + (n-2) + (n-3) + .... + 2 + 1 → n(n-1)/2</code>이므로, <strong>O(n²)</strong> 이다. </p>
<p>또한, Bubble Sort는 정렬이 돼있던 안돼있던, 2개의 원소를 비교하기 때문에 <strong>최선, 평균, 최악의 경우 모두 시간복잡도가 O(n²) 으로 동일</strong>하다. <em>(개선된 Bubble Sort가 존재하긴 하나, 기초를 다지기 위한 학습이므로 넘어가겠음)</em></p>
</br>

<h3 id="공간복잡도">공간복잡도</h3>
<p>주어진 배열 안에서 교환(swap)을 통해, 정렬이 수행되므로 <strong>O(n)</strong> 이다.</p>
</br>

<h3 id="장점">장점</h3>
<ul>
<li><p>구현이 매우 간단하고, 소스코드가 직관적이다.</p>
</li>
<li><p>정렬하고자 하는 배열 안에서 교환하는 방식이므로, 다른 메모리 공간을 필요로 하지 않다. → 제자리 정렬(in-place sorting)</p>
</li>
<li><p>안정 정렬(Stable Sort) 이다</p>
</li>
</ul>
</br>

<h3 id="단점">단점</h3>
<ul>
<li><p>시간복잡도가 최악, 최선, 평균 모두 O(n^2)으로, <strong>굉장히 비효율적</strong>이다.</p>
</li>
<li><p>정렬 돼있지 않은 원소가 정렬 됐을때의 자리로 가기 위해서, 교환 연산(swap)이 많이 일어나게 된다.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 상속 / 생성자]]></title>
            <link>https://velog.io/@sumin_lee_317/JAVA-%EC%83%81%EC%86%8D-%EC%83%9D%EC%84%B1%EC%9E%90</link>
            <guid>https://velog.io/@sumin_lee_317/JAVA-%EC%83%81%EC%86%8D-%EC%83%9D%EC%84%B1%EC%9E%90</guid>
            <pubDate>Thu, 29 Aug 2024 08:58:38 GMT</pubDate>
            <description><![CDATA[<h2 id="1-상속">1. 상속</h2>
<ul>
<li><span style="background-color:#DCFFE4">&#39;부모클래스🐓를 자식클래스🐥가 물려받는다&#39;</span>는 의미</li>
<li>java는 한 번에 하나의 부모클래스만 상속받을 수 있다.</li>
<li><code>private</code> 접근 제한을 갖는 멤버변수 및 메소드는 물려받을 수 없다.</li>
</ul>
<blockquote>
<p><strong><code>class C extends P {ㆍㆍㆍ}</code></strong>
→ <strong><span style="color:red">extends</span></strong> 발견
→ 자식(C)이 부모(P)를 물려받는다. (<strong><span style="color:red">상속</span></strong>)
→ 상속이므로 <strong><span style="color:red">부모부터 찾자!</span></strong></p>
</blockquote>
</br>

<h2 id="2-생성자">2. 생성자</h2>
<ul>
<li><strong>기본 생성자</strong> : <strong><code>A( ) {ㆍㆍㆍ}</code></strong> 의 형태, 매개변수 없음</li>
<li><strong>매개변수 생성자</strong> : <strong><code>A(int a) {ㆍㆍㆍ}</code></strong>의 형태, 매개변수 있음</li>
</ul>
</br>



<h2 id="📌-super--의-기능">📌 super( ); 의 기능</h2>
<h4 id="1-부모클래스🐓의-생성자-호출">1. 부모클래스🐓의 생성자 호출</h4>
<ul>
<li><p><strong><code>super( );</code></strong> : 보통 <strong>생략되어 <span style="color:orange">안 보임</span></strong> → <strong>부모의 <span style="color:orange">기본</span> 생성자</strong> 호출 (매개변수 없는 생성자)</p>
</li>
<li><p><strong><code>super(a);</code></strong> : 인자가 있어서 <strong>생략 불가</strong> → <strong>부모의 매개변수 생성자</strong> 호출</p>
</li>
</ul>
<blockquote>
<p>여기서 <strong>매개변수</strong>(a)<strong>의 값을 부모한테 전달</strong>한다. 
<code>super(a/10);</code> 
→ a/10을 연산하여 부모클래스에 a값으로 전달한다. (a=100)
그러나 자식클래스에서는 여전히 연산하기 전의 값인 a이다. (a=1000)</p>
</blockquote>
<h4 id="2-부모클래스🐓의-메서드-속성에-접근">2. 부모클래스🐓의 메서드, 속성에 접근</h4>
<ul>
<li><strong><code>super.display( );</code></strong> : 자식에서 <strong>부모의 <code>display( )</code></strong> 함수를 *<em>호출 *</em>
(※ <code>display( )</code> 함수는 부모한테 정의되어있다)</li>
</ul>
</br>


<h2 id="📌-this--의-기능">📌 this( ); 의 기능</h2>
<ul>
<li><strong>해당 클래스</strong>의 <strong>기본 생성자를 호출</strong></li>
</ul>
</br>



<h2 id="📌-부모의-형태로-자식을-정의할-때">📌 부모의 형태로 자식을 정의할 때</h2>
<pre><code class="language-c">Parent p1 = new Child( );
// 🐓 p = new 🐥();</code></pre>
<ul>
<li><p>부모클래스에서 정의된 메서드 → 부모클래스의 변수를 참조</p>
</li>
<li><p>자식클래스에서 정의된 메서드 → 자식클래스의 변수를 참조</p>
</li>
<li><p>메서드 내에서 사용하는 변수 a는 해당 클래스에 정의도니 변수를 참조한다. </p>
</li>
<li><p>부모가 가지고 있는 메서드만 사용할 수 있다.</p>
</li>
</ul>
<blockquote>
<ul>
<li><strong><code>A ab = new B( );</code></strong> : 앞의 형태가 A 이므로, <strong>A에 정의된 변수 값을 사용</strong>한다.</li>
</ul>
</blockquote>
<ul>
<li><strong><code>B ab = new B( );</code></strong> : 앞의 형태가 B 이므로, <strong>B에 정의된 변수 값을 사용</strong>한다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[메뉴와 대화상자]]></title>
            <link>https://velog.io/@sumin_lee_317/%EB%A9%94%EB%89%B4%EC%99%80-%EB%8C%80%ED%99%94%EC%83%81%EC%9E%90</link>
            <guid>https://velog.io/@sumin_lee_317/%EB%A9%94%EB%89%B4%EC%99%80-%EB%8C%80%ED%99%94%EC%83%81%EC%9E%90</guid>
            <pubDate>Tue, 13 Dec 2022 15:33:25 GMT</pubDate>
            <description><![CDATA[<h1 id="🎨-메뉴">🎨 메뉴</h1>
<ul>
<li>2가지 종류: 옵션 메뉴, 컨텍스트 메뉴 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/e713b8d5-4058-4459-8c23-985fe05d5818/image.png" alt=""></li>
</ul>
<h2 id="🧵-옵션-메뉴option-menu">🧵 옵션 메뉴(option menu)</h2>
<ul>
<li>메뉴 버튼 클릭 시 (주로) 하단에 메뉴가 촤라락 펼쳐짐 </li>
<li>이 옵션 메뉴를 생성하는 방법에는 2가지가 있다. <ol>
<li>메뉴 XML 파일 생성 후 Java에서 호출하는 방법<ul>
<li>메뉴는 대부분 항목이 고정되어 있으므로 XML 사용<ul>
<li>메뉴 XML 파일을 이용하면 앱을 다른 나라 언어로 변경할 때 Java 코드를 건드리지 않아도 되므로 효율적임</li>
</ul>
</li>
</ul>
</li>
<li>Java만 이용하는 방법</li>
</ol>
</li>
</ul>
<p>먼저 XML과 Java를 사용하는 방법에 대해 알아보자. </p>
<h3 id="⭐-xmljava로-옵션-메뉴-만드는-틀">⭐ XML+Java로 옵션 메뉴 만드는 틀</h3>
<ul>
<li>메뉴 XML을 사용하는 방법 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/5b69edc7-df87-4ffd-8fdf-5705cb796433/image.png" alt=""></li>
<li><strong>메뉴 XML 파일의 형식</strong> <img src="https://velog.velcdn.com/images/sumin_lee_317/post/92264433-4030-4754-8250-93ce4320f59f/image.png" alt=""></li>
<li><strong>onCreateOptionsMenu( )</strong> 메소드 기본 형식 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/567b804e-4c30-4074-bf37-566e15fde65e/image.png" alt=""></li>
<li><strong>onOptionsItemSelected( )</strong> 메소드 기본 형식  <ul>
<li>메뉴를 선택했을 때 어떤 동작을 할 것인지 정의함</li>
<li>메뉴는 항목이 여러 개 나오기 때문에 보통 switch()~case문을 사용함 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/8a039d7d-11ff-4271-911f-0d98810e8361/image.png" alt=""></li>
</ul>
</li>
</ul>
<blockquote>
<h3 id="🍪-인플레이터inflater">🍪 인플레이터(Inflater)</h3>
</blockquote>
<ul>
<li>&#39;부풀리는 장치&#39; or &#39;자전거 등의 공기 펌프&#39;라는 뜻</li>
<li>즉, 풍선에 바람을 넣어서 실제 객체로 만들어 사용한다는 의미 (풍선은 바람을 넣기 전에는 별 의미가 없다.)</li>
<li>안드로이드에서 사용되는 인플레이터를 이와 같이 생각하면, <strong>정적으로 존재하는 XML 파일(풍선)을 Java 코드에서 접근하여(바람을 넣어) 실제 객체로 만들어서 사용하는 것</strong>이라고 볼 수 있다. </li>
<li><strong>메뉴 인플레이터(MenuInflater)</strong> 객체는 메뉴 XML 파일을 Java 코드에서 가져와 사용하는 것이고, </li>
<li><em>레이아웃 인플레이터(LayoutInflater)*</em>는 레이아웃 XML 파일을 Java 코드에서 가져와 사용하는 것이다. </li>
</ul>
<h3 id="✍🏻-배경색-바꾸기-앱-만들기---xml--java">✍🏻 배경색 바꾸기 앱 만들기 - XML &amp; Java</h3>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/53375cdc-09fa-42d8-a495-8f5f4e75a2c4/image.png" alt=""></p>
<h4 id="1-activity_mainxml-수정하기">1. activity_main.xml 수정하기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/80f4ae3a-e2f4-4f15-b41e-4875e4bdec4a/image.png" alt=""></h4>
<h4 id="2-res-폴더-하위에-menu-폴더-생성">2. res 폴더 하위에 menu 폴더 생성 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/1536d628-807a-45f4-bf61-5b7072ab3859/image.png" alt=""></h4>
<h4 id="3-메뉴-xml-생성하기">3. 메뉴 xml 생성하기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/0301a4e6-b5b4-4cef-b4c5-5059a35f97d4/image.png" alt=""></h4>
<h4 id="4-메뉴-xml-편집하기">4. 메뉴 xml 편집하기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/fbd003d8-3d1f-459a-815c-f76335b804a3/image.png" alt=""></h4>
<ul>
<li>1,26행: 메뉴의 시작과 끝을 나타낸다. menu 폴더에 XML 파일을 만들면 자동으로 생성된다.</li>
<li>3~6행: 메뉴 항목을 1개 추가한다. id는 Java 코드에서 접근할 때 사용하며, 타이틀은 화면에 보이는 제목이다.</li>
<li>15~24행: 메뉴 항목 안에 다시 <code>&lt;menu&gt;</code>가 있으므로 이 부분을 클릭하면 서브 메뉴가 나타난다. (menu 중첩)</li>
<li>16~23행: 서브 메뉴의 메뉴 항목이 나열되어 있다. </li>
</ul>
<h4 id="5-java-코드-작성-및-수정">5. Java 코드 작성 및 수정 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/8f4c5c34-1fbc-446b-9f1e-41c402ef5b29/image.png" alt=""></h4>
<ul>
<li>3~4행: 레이아웃과 버튼에 대응할 전역변수 2개를 선언한다.</li>
<li>11~12행: 메인함수 onCreate() 안에서 위젯 변수 2개에 위젯을 대입한다. </li>
</ul>
<h4 id="6-java-코드-수정---옵션메뉴를-등록하는-oncreateoptionsmenu-메소드-코딩">6. Java 코드 수정 - 옵션메뉴를 등록하는 OncreateOptionsMenu() 메소드 코딩 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/d5492fa2-b9a0-4a44-abee-5994c98b1c2c/image.png" alt=""></h4>
<ul>
<li>8,11행: 상위 클래스의 생성자를 실행한다. 자동 완성된 부분에서 return문만 삭제하고 마지막 행에 return true를 추가한다.</li>
<li>9,10행: 메뉴 인플레이터를 생성하고 앞에서 작성한 메뉴 XML 파일(<code>menu1.xml</code>=<code>R.menu.menu1</code>)을 등록한다. </li>
</ul>
<h4 id="7-java-코드-수정---메뉴-클릭-시-동작하는-onoptionsitemselected--메소드-코딩">7. Java 코드 수정 - 메뉴 클릭 시 동작하는 onOptionsItemSelected( ) 메소드 코딩 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/a595a49b-dc5f-4215-858a-4634249bf164/image.png" alt=""></h4>
<ul>
<li>8<del>19행: <code>item.getItemId</code>로 어떤 항목을 선택했는지 구한 후 switch()</del>case문으로 각 항목마다 실행할 내용을 코딩한다.</li>
<li>9~11행: 선택한 항목이 &#39;배경색(빨강)&#39;<code>itemRed</code>이면 레이아웃의 배경색을 빨강으로 설정한다.</li>
<li>12행: 9~11행과 거의 동일한 내용을 itemGreen, itemBlue에 대해서 반복한다.</li>
<li>14~17행: 선택된 메뉴가 서브 항목의 아이디라면 버튼을 회전시키거나 버튼의 X축을 2배 확대한다. 
서브 항목은 menu1.xml 화면에 나타나는 모양으로 구분된 것일뿐</li>
<li><em>Java 코드에서는 메인 항목, 서브 항목을 구분할 필요없이 case문의 아이디로만 구분*</em>한다. </li>
</ul>
</br>

<h3 id="✍🏻-배경색-바꾸기-앱-만들기---only-java">✍🏻 배경색 바꾸기 앱 만들기 - Only Java <img src="https://velog.velcdn.com/images/sumin_lee_317/post/b32de704-ce80-4a73-8095-e22438631411/image.png" alt=""></h3>
<ul>
<li><p>5~7행: <code>menu.add()</code> 함수로 <strong>직접 메뉴 &quot;항목&quot;을 추가</strong>한다. </p>
<ul>
<li><strong><code>menu.add(그룹아이디, 항목아이디, 순번, 제목)</code></strong> </li>
</ul>
</li>
<li><p><strong>메인 항목과 서브 항목은 메뉴 객체(<code>menu</code>, <code>sMenu</code>)만 다를 뿐,
항목아이디는 구분없이 그대로 이어진다.(<code>1</code>,<code>2</code>,<code>3</code>,<code>4</code>,<code>5</code>)</strong></p>
</li>
<li><p>Why?? switch()~case 문에서 이 <strong>항목아이디</strong>를 가지고 찾을 것이기 때문!</p>
</li>
<li><p>9~11행: 9행에서 SubMenu 클래스로 서브메뉴를 만들고 
10행과 11행에서 서브메뉴에 항목을 추가했다. </p>
</li>
<li><p>19행: 각 case문이 메뉴에 지정한 <strong>항목 아이디</strong>와 일치하도록 변경한다. </p>
</li>
</ul>
</br>

<h2 id="🧵-컨텍스트-메뉴context-menu">🧵 컨텍스트 메뉴(context menu)</h2>
<ul>
<li>일반적으로 <strong>위젯을 롱클릭했을 때</strong> 제목과 함께 <strong>화면 중앙에 출력됨</strong></li>
<li><strong>Windows의 팝업창</strong>과 유사함</li>
<li>여러 개 위젯에 메뉴를 설정 가능 (<code>메뉴 수 = 메뉴 XML 파일 수</code>)</li>
</ul>
<h3 id="⭐-xmljava로-컨텍스트-메뉴-만드는-틀">⭐ XML+Java로 컨텍스트 메뉴 만드는 틀</h3>
<ul>
<li><p>컨텍스트 메뉴 설정 순서 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/2103bb27-7b2b-49b3-a96d-c58b460e67d1/image.png" alt=""></p>
</li>
<li></li>
</ul>
<hr>
</br>

<h1 id="🎨-토스트toast">🎨 토스트(Toast)</h1>
<ul>
<li>화면에 잠깐 나타났다 사라지는 메세지</li>
<li>프로그래머가 디버깅 용도로 사용하기에도 적당</li>
</ul>
<h3 id="토스트의-일반적인-형태">토스트의 일반적인 형태 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/8843558d-d966-42b8-9c8d-420c7ab152db/image.png" alt=""></h3>
<ul>
<li>context : 출력할 화면, 보통 <code>this</code>를 쓴다. 
예외적으로 버튼을 클릭했을 때 내부 클래스에서 토스트를 출력하기 위해 <code>액티비티명.this</code>를 사용한다. </li>
<li>message : 출력할 메세지</li>
<li>duration : 화면에 나타나는 (지속)시간, 
<code>Toast.LENGTH_LONG</code> or<code>Toast.LENGTH_SHORT</code></li>
</ul>
<h3 id="토스트-위치-변경하기">토스트 위치 변경하기</h3>
<ul>
<li>토스트는 기본적으로 화면의 중앙 하단 부근에 나타나는데, <code>setGravity()</code> 메서드를 사용하면 위치를 변경할 수 있다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/9c4f13d8-a7fb-4689-858d-33b2b55c18f8/image.png" alt=""></li>
<li>gravity : 화면의 위, 중앙, 아래 등을 지정</li>
<li>xOffset, yOffset : 떨어진 거리</li>
</ul>
</br>

<h3 id="✍🏻-토스트-위치-바꾸어-출력하기">✍🏻 토스트 위치 바꾸어 출력하기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/0872f7c4-1cc0-4104-8d20-b1188af003ed/image.png" alt=""><img src="https://velog.velcdn.com/images/sumin_lee_317/post/b9416f9d-70e9-4f3d-b89b-72ab27037b05/image.png" alt=""></h3>
<ul>
<li><p>10~11행: 토스트메세지를 만든다.
현재 액티비티에 &#39;토스트 연습&#39;을 출력하고, 이 메세지를 짧은 시간동안 보여준다.</p>
</li>
<li><p>13<del>16행: 임의의 위치를 구한다. 
현재 안드로이드폰의 디스플레이를 <code>getSystemService()</code> 메소드로 구한 후, 
<code>getWidth()</code>로 화면 너비를, <code>getHeight</code>로 화면 높이를 돌려준다. 
<code>Math.random()</code>은 0</del>1 사이의 임의의 수를 구한다.
결국 xOffset은 0<del>화면너비 범위에서 임의의 수를, 
yOffset은 0</del>화면높이 범위에서 임의의 수를 구하는 것이다.  </p>
</li>
<li><p>18~19행: <code>setGravity()</code> 메서드로 
화면 상단(<code>Gravity.TOP</code>) 왼쪽(<code>Gravity.LEFT</code>)으로부터 
각각 xOffset, yOffset만큼 떨어진 곳에 토스트메세지를 출력한다. </p>
</li>
</ul>
<hr>
</br>

<h1 id="🎨-대화상자dialog">🎨 대화상자(dialog)</h1>
<ul>
<li>화면에 메세지를 나타낸 후, <code>확인</code>이나 <code>취소</code>같은 사용자의 선택을 받아들이는 경우에 사용한다. </li>
<li>토스트보다 좀 더 강력한 메세지</li>
<li>*<em>사용자에게 중요한 사항을 알려준 후, 사용자가 어떤 선택을 하게 하는 것이 목적이다. *</em></li>
</ul>
<h2 id="🧵-기본-대화상자">🧵 기본 대화상자</h2>
<ul>
<li>AlertDialog.Builder 클래스 사용 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/679547c1-c0f8-427b-a1d8-4d727c032c43/image.png" alt=""></li>
</ul>
</br>

<h3 id="✍🏻-버튼없는-기본형-대화상자-만들기">✍🏻 버튼없는 기본형 대화상자 만들기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/0f91f253-b7aa-480d-b315-5ce8a857fa5d/image.png" alt=""></h3>
<ul>
<li>버튼이 없는 기본형이므로, 키패드의 돌아가기 버튼을 클릭하면 대화상자가 닫힌다. </li>
<li>8행: AlertDialog.Builder 클래스를 사용해 대화상자를 생성한다.
현재 내부 클래스 안이므로 <code>액티비티명.this</code>로 컨텍스트를 지정한다.</li>
<li>9~11행: 제목, 메세지 내용, 아이콘을 설정한다.</li>
<li>12행: 대화상자를 화면에 출력한다. </li>
</ul>
<h3 id="✍🏻-버튼-1개인-대화상자-만들기">✍🏻 버튼 1개인 대화상자 만들기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/50119366-99ac-41c4-8c68-0abe533d97c0/image.png" alt=""></h3>
<ul>
<li>위의 코드에 <code>dlg.setPositiveButton()</code>만 추가하면 된다.</li>
<li><strong><code>setPositiveButton(&quot;문자열&quot;, 리스너)</code></strong>
현재 리스너 부분에 null을 입력했으므로 
<code>&lt;확인&gt;</code>을 클릭해도 대화상자만 닫힐 뿐 아무 동작도 일어나지 않는다. 
특정 동작을 하도록 만드려면 7행을 다음과 같이 수정한다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/03394170-622b-4730-a625-658537c61338/image.png" alt=""></li>
<li>만약, 취소버튼도 넣고싶다면 <code>dlg.setNegativeButton()</code>을 추가하면 된다.</li>
</ul>
</br>

<h2 id="🧵-목록-대화상자">🧵 목록 대화상자</h2>
<ul>
<li>대화상자에 리스트 형태의 목록을 출력하고 그중 하나를 선택하게 할 수 있다. </li>
<li>조금 복잡해 보일 수도 있으나 비슷한 형태로 매번 사용되니 코드를 통째로 기억하자! </li>
</ul>
<h3 id="✍🏻-기본형-목록-대화상자">✍🏻 기본형 목록 대화상자 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/fd97c681-c517-47cb-a613-3c398b836771/image.png" alt=""></h3>
<ul>
<li>*<em>기본형 목록 대화상자는 선택과 동시에 창이 닫힌다. *</em></li>
<li>4행: 출력할 항목의 문자열 배열(versionArray)을 만들었다. 내부 클래스 안에서 사용될 것이므로 final을 붙였다. </li>
<li>8~13행: <code>setItems(문자열 배열, 리스너)</code> 메소드를 사용했다. 
9행과 10행을 보면 리스너는 클릭할 경우에 동작하는 OnClickListner()를 사용했다.
10행의 onClick() 메소드 파라미터중 <code>which</code>는 몇 번째 항목을 선택했는지를 알려준다.
그러므로 11행에서 버튼의 글자를 배열(versionArray)의 which번째 문자로 변경했다.</li>
</ul>
<h3 id="✍🏻-라디오버튼-목록-대화상자">✍🏻 라디오버튼 목록 대화상자 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/0a47e1d6-6dda-47bc-ac0a-9e7f64da0143/image.png" alt=""></h3>
<ul>
<li>라디오버튼 목록 대화상자는 선택해도 대화상자가 닫히지 않는다. </li>
<li><code>setSingleChoiceItems(문자열 배열, 초기 선택 인덱스, 리스너)</code></li>
</ul>
<h3 id="✍🏻-체크박스-목록-대화상자">✍🏻 체크박스 목록 대화상자 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/c1dee8d1-238d-4acc-9658-f4332143d248/image.png" alt=""></h3>
<ul>
<li>여러 개를 동시에 선택할 수 있는 대화상자이다.</li>
<li><code>setMultiChoiceItems(문자열 배열, 체크유무 확인하는 배열, 리스너)</code></li>
<li>5행: 각 항목이 체크되었는지를 boolean 배열로 만들었다. 이 배열명을 9행에 입력해야한다.</li>
<li>9~15행: <code>setMultiChoiceItems()</code>의 두번째 파라미터(checkArray)는 문자열 배열과 <code>개수가 같은</code> boolean 배열이어야 한다. 그래야 처음 화면이 나올 때 항목의 체크여부를 표시할 수 있다. 
10행의 리스너는 <code>setMultiChoiceClickLister()</code>를 사용한다. 
파라미터로는 선택된 항목의 인덱스인 which와 해당항목의 체크여부인 isChecked가 있다. </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[어댑터뷰 (Adapter View)]]></title>
            <link>https://velog.io/@sumin_lee_317/%EC%96%B4%EB%8C%91%ED%84%B0%EB%B7%B0-h8tv7odo</link>
            <guid>https://velog.io/@sumin_lee_317/%EC%96%B4%EB%8C%91%ED%84%B0%EB%B7%B0-h8tv7odo</guid>
            <pubDate>Sat, 10 Dec 2022 08:38:50 GMT</pubDate>
            <description><![CDATA[<h1 id="🎨-어댑터뷰-adapter-view">🎨 어댑터뷰 (Adapter View)</h1>
<ul>
<li>뷰그룹의 하위 클래스 중에서 레이아웃을 제외한 것을 뷰 컨테이너라고 했다. </li>
<li>어댑터뷰 하위에 있는 그리드뷰, 리스트뷰, 갤러리, 스피너 등을 묶어서 부르는 말</li>
<li>어댑터뷰는 그 자체를 사용하기보단 하위 클래스를 사용한다. </li>
<li>어댑터뷰를 사용할 때 어댑터뷰의 모양을 설정하고 데이터를 채워주는
<code>ArrayAdapter&lt;T&gt;</code> 클래스를 함께 사용한다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/4f5b3818-d6a9-4e22-a1b1-3b98644f80a2/image.png" alt=""></li>
</ul>
<hr>
</br>

<h1 id="🎨-리스트뷰-listview">🎨 리스트뷰 (ListView)</h1>
<ul>
<li>데이터를 리스트 모양으로 보여주고 그중 하나를 선택하는 용도</li>
<li></li>
</ul>
<hr>
</br>

<h1 id="🎨-갤러리gallery">🎨 갤러리(Gallery)</h1>
<ul>
<li><strong>사진첩 효과</strong> (이미지를 배치하고 좌우로 스크롤하여 볼 수 있게 하는 기능)</li>
<li><strong>이미지 목록을 스크롤하는 기능만 존재</strong>
→ 이미지를 클릭했을 때 큰 이미지가 나타나게 하려면,
java 코드를 추가로 작성해야 함 </li>
<li>그리드뷰와 비슷하지만 좀 더 부드럽고 고급스러운 느낌을 줌</li>
</ul>
</br>

<h3 id="✍🏻-영화-포스터-앱-만들기">✍🏻 영화 포스터 앱 만들기</h3>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/b15d34c0-e55d-4a47-8998-2e56267ce2da/image.png" alt=""></p>
<h4 id="1-xml에-갤러리와-이미지뷰-추가하기">1. xml에 갤러리와 이미지뷰 추가하기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/41a31e04-0d68-45a3-8040-5f357a88135c/image.png" alt=""></h4>
<ul>
<li>2행: 레이아웃안에 <code>&lt;Gallery</code> <code>/&gt;</code>를 정의한다. </li>
<li>6행: 갤러리에서 <strong><code>spacing=&quot;5dp&quot;</code></strong>는 갤러리에 있는 이미지 간에 <strong>여백</strong>을 준다. </li>
</ul>
<h4 id="2-java-코드-수정하기-1-adapter-만들기">2. java 코드 수정하기 (1) Adapter 만들기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/ddccd96c-bfc0-46e7-a032-0732069fdc06/image.png" alt=""></h4>
<ul>
<li>7~8행: 11행에서 적용한 MyGalleryAdapter 변수를 생성하여 activity_main.xml의 갤러리에 적용한다.</li>
<li>11~22행: BaseAdapter를 상속받는 MyGalleryAdapter를 정의한다.</li>
<li>13~16행: 영화 포스터 파일의 아이디를 배열로 지정한다.</li>
<li>21행: 자동 완성된 추상 메소드 4개가 들어간다. </li>
</ul>
<h4 id="3-java-코드-수정하기-2-getcount와-getview-수정하기">3. java 코드 수정하기 (2) getCount()와 getView() 수정하기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/cd45db58-65aa-4658-8621-8c28f017c604/image.png" alt=""></h4>
<ul>
<li>7행: _예제11-10 7행_의 GridView를 Gallery로 수정한다. 
여기서 <code>Gallery.LayoutParams(200,300)</code>은 갤러리뷰에 나오는 이미지 크기를 <code>200x300</code>으로 나열해서 보여주겠다는 뜻이다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/5c5599d0-4ca3-4825-9457-4f8c243c095e/image.png" alt=""></li>
</ul>
<h4 id="4-java-코드-수정하기-3-갤러리의-영화를-클릭하면-아래쪽-이미지뷰에-포스터가-원래-크기로-보여지도록-함">4. java 코드 수정하기 (3) 갤러리의 영화를 클릭하면 아래쪽 이미지뷰에 포스터가 원래 크기로 보여지도록 함 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/db477d5c-116e-43ed-b6aa-b1bea7c32e44/image.png" alt=""></h4>
<ul>
<li>2~9행: 클릭리스너가 아닌 <strong>터치리스너로 사용</strong>한다.(주의)</li>
<li>5행: <code>.setScaleType(ImageView.ScaleType.FIT_CENTER)</code>로 이미지뷰를 각 그리드뷰 칸의 중앙에 배치한다.</li>
<li>6행: <code>.setImageResource()</code>로 이미지뷰에 영화포스터 1개를 적용한다. </li>
</ul>
<hr>
</br>

<h1 id="🎨-스피너">🎨 스피너</h1>
<ul>
<li>PC의 드롭다운 박스와 비슷한 기능</li>
<li>화면이 작은 스마트폰에서 여러 개 중 하나를 선택할 수 있도록 확장하는 용도로 사용 </br>

</li>
</ul>
<h3 id="✍🏻-기본-예제">✍🏻 기본 예제 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/3b288afa-b362-4a1a-9cc0-a2665ab02e48/image.png" alt=""> <img src="https://velog.velcdn.com/images/sumin_lee_317/post/98f1512d-0ba4-47f4-adb9-454016731a7b/image.png" alt=""></h3>
<ul>
<li>11~14행: ArrayAdapter<String> 형 변수를 선언한다. 
생성자의 두 번째 파라미터로 스피너의 형식(simple_spinner_item)을 선택하고, 세 번째 파라미터에는 적용할 배열(movie)을 지정한다. 스피너의 형식으로 simple_spinner_dropdown_item을 사용해도 된다. </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[그래픽과 이미지]]></title>
            <link>https://velog.io/@sumin_lee_317/%EA%B7%B8%EB%9E%98%ED%94%BD%EA%B3%BC-%EC%9D%B4%EB%AF%B8%EC%A7%80-7od0uu4o</link>
            <guid>https://velog.io/@sumin_lee_317/%EA%B7%B8%EB%9E%98%ED%94%BD%EA%B3%BC-%EC%9D%B4%EB%AF%B8%EC%A7%80-7od0uu4o</guid>
            <pubDate>Sat, 10 Dec 2022 06:07:29 GMT</pubDate>
            <description><![CDATA[<blockquote>
<ul>
<li>캔버스 : 🗒 도화지</li>
</ul>
</blockquote>
<ul>
<li>페인트 : 🖌️ 붓</li>
</ul>
<h1 id="🎨-캔버스와-페인트">🎨 캔버스와 페인트</h1>
<ul>
<li>화면에 도형을 그릴 때 사용되는 Canvas와 Paint 클래스 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/554257be-0d4d-45bf-a802-f688fe422e40/image.png" alt=""></li>
<li>android.graphics.<strong>Canvas</strong> 클래스의 <strong>점을 찍는 메소드</strong>의 원형 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/b5241805-cf0a-4060-8b79-847d1d79fbf6/image.png" alt=""><ul>
<li>x와 y좌표에 점을 찍음</li>
<li>단, <strong>원점은 왼쪽 상단부터 (0,0)으로 시작함</strong></li>
<li>점은 Paint 객체에 설정된 색상, 두께 등으로 그려짐</li>
</ul>
</li>
</ul>
<ul>
<li>android.graphics.<strong>Paint</strong> 클래스에서 <strong>색상을 지정하는 메소드</strong>의 원형 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/83c2b858-91bc-45d9-82b6-2bac84ec13b8/image.png" alt=""></li>
</ul>
<p>이런 식으로 사용할 수 있다. </p>
<h2 id="⭐-기억해야할-틀">⭐ 기억해야할 틀</h2>
<ul>
<li>그래픽을 표현할 때는 View 클래스를 재정의하는 형태를 많이 사용함</li>
<li>나머지는 자동 완성되거나 고정된 내용이므로 밑줄 친 부분만 변경하면 됨</li>
<li>캔버스와 페인트를 사용해 화면에 나타낼 내용은 주석 부분에 코딩함
<img src="https://velog.velcdn.com/images/sumin_lee_317/post/77ed304d-b2ff-49c8-ac7c-b74809883cf8/image.png" alt=""></li>
</ul>
</br>

<h2 id="🧵-그래픽-처리의-기본-방식">🧵 그래픽 처리의 기본 방식</h2>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/9a368ee6-ee01-4052-9e79-9bd9b8e52f84/image.png" alt=""></p>
<ul>
<li>3행: XML 대신 재정의한 클래스를 화면에 보여준다.</li>
<li>6행: View 클래스를 상속받아 MyGraphicView 클래스를 재정의한다. </li>
<li>7~9행: 재정의한 클래스의 생성자이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/201eeab8-d7ed-4cda-b7df-2a75b3822f8f/image.png" alt=""></p>
<ul>
<li>12~51행(<code>@override</code>부터): 클래스가 생성 or 무효화되면 실행되는 메소드를 정의한다. 
일반적으로 화면에 그려질 내용을 이곳에 코딩한다. </li>
<li>13행: 상위 클래스의 onDraw()를 먼저 호출한다. </li>
<li>14행: Paint 클래스 변수를 생성한다.</li>
<li>15행: <code>페인트.setAntiAlias()</code> 메서드는 도형의 끝을 부드럽게 처리해준다. </li>
<li>16,19,23행: <code>페인트.setColor()</code>로 도형의 색을 Paint에 저장한다. 
<code>페인트.setColor()</code>로 <strong>지정한 색은 다른 색으로 지정하기 전까지 계속 유지된다.</strong> </li>
<li>17,21행: <code>캔버스.drawline(시작x, 시작y, 끝x, 끝y, 페인트)</code>로 선을 그린다. </li>
<li>20,24,39,48행: <code>페인트.setStrokeWidth()</code>로 그려질 도형 or 글자 외곽선 두께를 설정한다.
0으로 설정하면 기본값인 1px 두께로 그려진다. </li>
<li>26행: <code>페인트.setStyle(Paint.Style.FILL)</code>로 도형의 내부를 채운다. 얘도 한 번 설정하면 <strong>변경 전까지 계속 유지</strong>된다. </li>
<li>30행: <code>페인트.setStyle(Paint.Style.STROKE)</code>로 도형의 내부를 채우지 않는다. 얘도 한 번 설정하면 <strong>변경 전까지 계속 유지</strong>된다. </li>
<li>27,31,34행: <code>Rect 객체명 = new Rect(x,y,x1,y2)</code>으로 사각형을 그리기 위해 Rect 객체를 생성하고 4개의 좌표를 미리 만든다. Rect 클래스는 int형을, RectF 클래스는 float형 값을 갖는다.</li>
<li>28,32행: <code>캔버스.drawRect(사각형객체명, 페인트명)</code>으로 사각형을 그린다. </li>
<li>35행: <code>캔버스.drawRoundRect(사각형객체명, 타원의 x축 반지름, 타원의 y축 반지름, 페인트명)</code>으로 사각형의 모서리를 둥글게 처리한다. 
x와 y값이 클수록 모서리가 더 둥근 사각형이 된다.</li>
<li>37행: <code>캔버스.drawCircle(중심x, 중심y, 반지름, 페인트명)</code>으로 원을 그린다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/5de6e646-8c5f-4abb-9fe6-c5fe433e5e41/image.png" alt=""> </p>
<ul>
<li><p>40~45행: <strong>Path는 연결된 여러 점을 가진 클래스</strong>이다. 
<code>moveTo()</code> 메서드로 해당 점으로 이동한 다음, <code>lineTo()</code> 메서드로 점을 계속 추가한다. </p>
</li>
<li><p>46행: <code>캔버스.drawPath(패스명, 페인트명)</code>으로 생성한 패스를 그린다.</p>
</li>
<li><p>49행: <code>페인트.setTextSize()</code>로 글자 크기를 설정한다.</p>
</li>
<li><p>50행: <code>캔버스.drawText(&quot;출력할문구&quot;, x, y, 페인트명)</code>으로 글자를 해당 좌표에 출력한다. </p>
</li>
<li><p><code>페인트.setStrokeCap()</code> : </p>
</li>
<li><p><code>캔버스.drawOval(x, y, width, height)</code> : 사각형 안에 내접하는 타원 그리기</p>
</li>
<li><p><code>페인트.setColor(Color.argb())</code> : 투명도까지 설정가능한 색 설정 메서드</p>
</li>
</ul>
<blockquote>
<p>🍪 <a href="https://darksilber.tistory.com/20">Canvas의 메서드들</a> (점, 선, 원, 사각형에 기본 도형을 그린다.)</p>
</blockquote>
<pre><code>📍 drawPoint(x, y, paint) : (x,y) 좌표에 점을 찍는다.
📍 drawLine(startX, startY, stopX, stopY, paint) : (x,y) 좌표부터 (x,y) 좌표에 선을 그린다.
📍 drawCircle(x, y, radius, paint) : (x,y) 좌표에 반지름(radius)만큼 원을 그린다.
📍 drawRect(left, top, right, bottom) : (left, top)와 (right, bottom)의 대각선을 기초로 사각형을 그린다.
📍 drawText(text, x, y, paint) : (x,y) 좌표에 문자를 출력한다.
📍 Paint.setColor(int color) : 그리기 색상
📍 drawARGB(a, r, g, b) : 기존 색상에 alpha가 추가된 것. (투명 : 0xff / 불투명 : 0x00)
📍 drawRGB(r, g, b) : 0~255까지 각 색상의 코드를 적으면 됨.
📍 drawColor(int color) : RED, BLUE 등 원하는 색상을 적으면 된다.
📍 drawPaint(paint) : 설정 값을 적용, 단순한 채우기
📍 drawRoundRect(RectF r, rx, ry, paint)
- rx &amp; ry : 모서리의 둥근 정도. 가상의 타원으로 두 값이 클수록 모서리가 둥글다.
📍 drawOval(RectF r, paint) : Oval은 달걀모양, 지정한 사각형 영역에 내접한 원을 그린다.
📍 drawArc(RectF r, startAngle, sweepAngle, boolean useCenter, paint)
- startAngle : 3시방향이 0도, 시계방향으로 증가
- sweepAngle : 그리는 각도 크기
- useCenter : (T) 부채꼴, (F) 호
📍 drawLines(float[] pts, paint) : 배열에 저장된 선을 순서대로 그린다. 연결하고 싶으면 시작과 끝 점을 일치시킨다.
📍 drawPoints(float[] pts, paint) : 배열상의 좌표를 꺼내 여러 개의 점을 찍는다.</code></pre><blockquote>
<p>🍪 Paint의 메서드들 (그리기에 대한 속성 정보를 가지는 객체)</p>
</blockquote>
<pre><code>📍 setAntiAlias(boolean) : 경계면을 부드럽게 처리해준다.
📍 setColor(int color) : 단색을 지정한다.
📍 setRGB(r, g, b) : 더 더양한 색상을 지정한다.
📍 setARGB(a, r, g, b) : RGB에 Alpha가 추가된 것이다. Alpha는 투명이냐 불투명이냐를 결정할 수 있다.
📍 setStrokeWidth(width) : 펜 굵기
📍 setStrokeCap(Paint.Cap cap) : 끝 모양
- BUTT : 지정한 좌표에서 선이 끝남
- ROUND : 둥근 모양으로 끝이 장식된다.
- SQUARE : 사각형 모양이되 지정된 좌표보다 조금 더 그어진다.
📍 setStrokeJoin(Paint.Join join) : 모서리처럼 선분이 만나 각지는 곳의 모양
- MITER : 모서리를 90도 각진 형태 (Default)
- BEVEL : 모서리가 깍인 형태
- ROUND : 둥근 형태
📍 setStrokeMiter(float miter) : 0 이상의 값으로 어느 정도 각도로 뾰족하게 할 것인가 (StrokeJoin의 소속)
📍 setStyle(Paint.Style style) : 외곽선과 내부 중 어느 쪽을 그릴 것인가
- FILL : 채우기만 하며 외곽선 X (Default)
- FILL_AND_STROKE : 채우기도 하고 외곽선도 그린다.
- STROKE : 채우지는 않고 외곽선만 그린다.
📍 set(Paint src) : 객체끼리 대입
📍 reset() : 초기화
💡 cf) invalidate() : 새로 canvas를 그려준다.</code></pre></br>

<h2 id="🧵-터치-이벤트">🧵 터치 이벤트</h2>
<ul>
<li>화면에 생성한 뷰를 터치하면 Touch 이벤트가 발생</li>
<li>View 클래스의 onTouchEvent( ) 메소드를 오버라이드해서 코딩 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/cba0a964-7c3f-4f85-8930-b92d2d727000/image.png" alt=""></li>
<li><code>.getAction()</code> 로 터치한 동작을 얻은 후, 각 터치를 switch~case문으로 구분한다. </li>
<li>손가락으로 그림을 그리려면 터치 이벤트를 설정해야 한다. </li>
</ul>
<h3 id="✍🏻-간단-그림판-앱-만들기">✍🏻 간단 그림판 앱 만들기</h3>
<h4 id="1-view-클래스의-상속을-받는-mygraphicview-클래스-만들기">1. View 클래스의 상속을 받는 MyGraphicView 클래스 만들기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/b46d9a41-243c-4e6a-873e-f22d7f8c7075/image.png" alt=""></h4>
<ul>
<li>3행: 전역상수를 선언한다. 메뉴에서 선택한 것이 선인지 원인지를 구분하기 위해 사용할 것이다.</li>
<li>4행: curShape는 현재 선택된 도형이 선(default)인지 원인지를 저장한다.</li>
<li>13~18행: View 클래스로부터 상속받은 MyGraphicView 클래스를 화면에 출력한다. </li>
</ul>
<h4 id="2-옵션-메뉴-작성하기">2. 옵션 메뉴 작성하기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/4aa8c981-0185-4b5b-b74a-987530b41291/image.png" alt=""></h4>
<ul>
<li>오른쪽 상단에 <code>선 그리기</code>, <code>원 그리기</code> 옵션 메뉴 만들기</li>
<li>항목을 클릭하면 curShape 변수에, 선택한 전역상수 대입</li>
<li>onCreate( )와 같은 레벨로 <code>onCreateOptionsMenu( )</code> 와 <code>onOptionsItemSelected( )</code> 메소드 자동 완성</li>
</ul>
<h4 id="3-터치와-관련된-메소드-완성하기">3. 터치와 관련된 메소드 완성하기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/0f08339d-75d2-49e0-a148-4ac6f02af047/image.png" alt=""></h4>
<ul>
<li>MyGraphicView의 전역변수인 시작x, 시작y, 끝x, 끝y, 반지름 변수를 선언</li>
<li><code>onTouchEvent( )</code> 메소드 자동 완성 후 추가될 부분 작성</li>
<li>2행: 시작점과 끝점 좌표를 저장하기 위한 클래스 멤버 변수 4개를 선언한다. </li>
<li>9~12행: 처음 터치했을 때가 선의 시작점이나 원의 중심점이 되는데 이 위치를 기억한다. </li>
<li>13~17행: 화면을 터치한 상태에서 드래그하면 <strong>ACTION_MOVE</strong>에 해당되는데, <strong>ACTION_UP과 동일하게 취급</strong>하는 이유는 드래그할 때마다 그려지는 선(or 원)이 손가락을 계속 따라다니며 흔적을 보여주는 효과를 내야하기 때문이다. </li>
<li><em>화면에서 손가락을 떼면 ACTION_UP이 발생*</em>하고 <code>onTouchEvent()</code> 메소드가 더이상 실행되지 않는다. 즉, 시작점(startX,startY)과 <strong>끝점(stopX,stopY)이 결정</strong>되는 것이다. 
17행의 <strong><code>invalidate()</code>를 호출하면 화면이 무효화</strong>되고 onDraw() 메서드를 자동으로 실행한다. </li>
</ul>
<h4 id="4-화면에-도형을-그리는-ondraw-메서드-완성하기">4. 화면에 도형을 그리는 onDraw() 메서드 완성하기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/0dddb189-c417-4972-92e2-5ecd3442068e/image.png" alt=""></h4>
<ul>
<li>MyGraphicView의 내부에 onDraw( )를 자동완성하고 나머지는 코딩</li>
<li>페인트에 선의 두께, 채우기 여부, 선의 색상 지정</li>
<li>switch( )~case문으로 메뉴에서 선택한 내용에 따라 선 or 원을 그림</li>
<li>3~7행: 페인트에 선의 두께, 채우기 여부, 선의 색상을 지정한다. </li>
<li>9~18행: 옵션 메뉴에서 선택한 항목에 따라 선 or 원을 그린다. 
<em>예제9-3</em> 에서 옵션 메뉴에 따라 curShape 변수의 값이 변하게 했다. </li>
<li>10~11행: 손가락으로 터치한 점(startX,startY)과 손가락을 뗀 점(stopX,stopY)까지 선을 그린다.</li>
<li>13~16행: 시작점과 끝점의 거리를 계산해 반지름(radius)으로 사용한다. 
16행에서 시작점을 중심으로 하고 반지름이 radius인 원을 그린다.</li>
</ul>
<hr>
</br>

<h1 id="🎨-이미지">🎨 이미지</h1>
</br>

<h2 id="🧵-비트맵의-기본">🧵 비트맵의 기본</h2>
<ul>
<li><strong>Bitmap 클래스</strong>는 <strong>캔버스에 이미지 파일을 보여줄 때</strong> 사용된다. </li>
<li><strong>/res/drawable 폴더에 있는 이미지 파일을 보여주는</strong> onDraw() 메소드 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/e50b096b-653b-4214-a139-6fd9e175d85c/image.png" alt=""><ul>
<li><strong><code>BitmapFactory.decodeResource()</code></strong> 로 <strong>리소스 이미지에 접근</strong></li>
<li><code>캔버스.drawBitmap(비트맵이미지, 시작x, 시작y, null)</code> 로 <strong>화면에 이미지 출력</strong></li>
<li><code>비트맵이미지.recycle()</code> 로 <strong>비트맵 리소스 해제</strong></li>
</ul>
</li>
</ul>
<ul>
<li><strong>SD 카드의 이미지 파일을 보여주는</strong> onDraw( ) 메소드 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/f6e69e35-63a2-4fb4-94d4-3bea4bda7dcd/image.png" alt=""><ul>
<li><strong><code>BitmapFactory.decodeFile()</code></strong> 로 <strong>SD카드의 이미지에 접근</strong></li>
<li><code>캔버스.drawBitmap(비트맵이미지, 시작x, 시작y, null)</code> 로 <strong>화면에 이미지 출력</strong><ul>
<li><code>비트맵이미지.recycle()</code> 로 <strong>비트맵 리소스 해제</strong></li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>이미지를 <strong>화면 중앙에 출력</strong>하기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/e1d98681-7d59-4218-bcf9-bdc549c42b00/image.png" alt=""></li>
</ul>
<ul>
<li>이미지를 화면 중앙에 출력하는 간단 예제 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/6b626fbb-5c09-473f-a606-c2619a68aa19/image.png" alt=""><ul>
<li>13행: res/drawable 이미지에 접근한다.</li>
<li>14~15행: <strong><code>this.getWidth()</code></strong>는 <strong>현재 뷰(MyGraphicView)의 너비</strong>를 구한다. 현재 뷰의 너비에서 이미지의 너비를 뺀 다음 2로 나눈 위치를 시작점으로 하여 이미지를 출력한다. 결국 화면 중앙에 이미지가 출력된다.</li>
<li>16행: 이미지를 화면에 출력한다.</li>
<li>17행: 비트맵 리소스를 해제한다. </li>
</ul>
</li>
</ul>
</br>

<h2 id="🧵-이미지의-기하학적-변환">🧵 이미지의 기하학적 변환</h2>
<ul>
<li>이미지에 대해 기하학적 변환을 하는 것이 아니라 <strong>캔버스(도화지)에 대해 기하학적 변환을 한 다음, 이미지 파일을 변환된 캔버스에 출력하는 것</strong>이다. </li>
<li>도화지를 회전시킨 상태에서 그림을 그리면 결국 그림이 회전된 것으로 보이는 효과와 마찬가지이다.</li>
</ul>
<h4 id="⭐-많이-사용되는-canvas-클래스의-기하학적-메소드">⭐ 많이 사용되는 Canvas 클래스의 기하학적 메소드</h4>
<ul>
<li>회전: <strong><code>rotate( )</code></strong></li>
<li>확대/축소: <strong><code>scale( )</code></strong></li>
<li>이동: <strong><code>translate( )</code></strong></li>
<li>기울이기: <strong><code>skew( )</code></strong>
<img src="https://velog.velcdn.com/images/sumin_lee_317/post/5126397e-4650-44d9-9ac4-cc40e559a105/image.png" alt=""></li>
</ul>
<h3 id="✍🏻-기하학적-변환-적용해보기">✍🏻 기하학적 변환 적용해보기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/a1fdd6b9-e277-42fc-a2ba-5ead023fe76b/image.png" alt=""></h3>
<ul>
<li>5~6행: 뷰(그려지는 화면)의 중심 좌표를 구한다.</li>
<li>10행: 캔버스를 45도 회전시키며, 회전시키는 기준<del>(중심)</del>을 뷰의 중앙으로 설정했다. </li>
<li>11행: 회전된 캔버스에 이미지를 출력한다.</li>
<li>13행: 캔버스를 X축으로 -150만큼, Y축으로 +200만큼 이동한다.</li>
<li>16행: 캔버스의 축척을 2배 확대한다.</li>
<li>19행: 캔버스를 0.3만큼 기울인다.</li>
</ul>
</br>

<h2 id="🧵-이미지-활용">🧵 이미지 활용</h2>
<ul>
<li>우리는 포토샵 등의 이미지 처리 응용 프로그램으로 이미지에 다양한 효과를 줄 수 있다. 안드로이드에서도 <strong>엠보싱, 블러링</strong> 등의 효과를 처리할 수 있다. </li>
<li>안드로이드에서는 <strong>ColorMatrix 클래스</strong>를 활용해 <strong>색상을 처리</strong>한다. </li>
</ul>
<h3 id="블러링blurring">블러링(Blurring)</h3>
<ul>
<li><strong>이미지를 뿌옇게 만드는 효과</strong></li>
<li><strong>BlurMaskFilter</strong> 클래스를 사용함 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/a3960f2e-7d15-400d-9b73-ea2b1ed3671d/image.png" alt=""></li>
</ul>
<ul>
<li>스타일에 따른 효과 변화 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/7497d4c1-452f-44ce-9b14-8046e2f40ef2/image.png" alt=""></li>
</ul>
<ul>
<li>블러링 효과를 적용하는 간단 예제 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/0e2906b4-1351-4c97-94c5-decad00b1834/image.png" alt=""><ul>
<li>9~10행: 블러링 효과 적용을 위해 Paint 클래스와 BlurMaskFilter 클래스를 준비한다.</li>
<li>12행: 블러마스크필터를 생성한다. <code>30</code>은 블러링 효과를 낼 반지름(크기)이고, <code>NORMAL</code>은 스타일이다.</li>
<li>13행: 페인트 변수에 블러마스크필터를 적용한다.</li>
<li>14행: 비트맵을 출력할 때 페인트를 적용한다.</li>
<li>16행: 12~15행을 반복한다. (스타일만 변경)</li>
</ul>
</li>
</ul>
</br>

<h3 id="엠보싱embossing">엠보싱(embossing)</h3>
<ul>
<li>이미지가 <strong>볼록하게 튀어나와 보이는 효과</strong></li>
<li><strong>EmbossMaskFilter</strong> 클래스를 사용</li>
<li>블러링보다 복잡함 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/4223962f-96e7-47e1-ab1e-ebd55d040b82/image.png" alt=""><ul>
<li><code>빛의 xyz 방향 1차 배열</code>: 빛이 비추는 x, y, z방향 배열</li>
<li><code>빛의 밝기</code>: 0~1의 값</li>
<li><code>반사 계수</code>: 5~8이 적당</li>
<li><code>블러링 크기</code>: <strong>볼록하게 표현하기 위한 가장자리의 크기</strong></li>
</ul>
</li>
</ul>
<ul>
<li>빛 xyz방향 1차 배열에 따른 효과 변화 살펴보기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/5b8a8367-d551-420a-95de-05329359ca79/image.png" alt=""></li>
</ul>
<ul>
<li>엠보싱을 적용한 간단 예제 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/03d86c15-41e1-445f-adb6-3a6aee2ff7aa/image.png" alt=""><ul>
<li>9행: 엠보싱 효과 적용을 위해 EmbossMaskFilter 클래스를 준비한다.</li>
<li>11행: 엠보싱마스크필터를 생성한다. 필요에 따라 값을 적절히 변경해도 된다.</li>
<li>14행: 11~13행을 반복한다. (빛의 방향만 <code>{10,3,3}</code>,<code>{3,10,3}</code>,<code>{3,3,10}</code> 으로 변경)</li>
</ul>
</li>
</ul>
</br>

<h3 id="컬러매트릭스color-matrix">컬러매트릭스(Color Matrix)</h3>
<ul>
<li><strong>색상이나 밝기를 조절</strong></li>
<li><strong>ColorMatrixColorFilter</strong> 클래스를 사용함 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/59cac0e3-e3e0-4f69-805a-f536659f815d/image.png" alt=""></li>
<li>ColorMatrix에 사용할 배열(Array)의 각 위치의 값
<img src="https://velog.velcdn.com/images/sumin_lee_317/post/0a92398a-0b00-495d-9d3e-c1b795d6205c/image.png" alt=""><ul>
<li>배열의 크기는 <code>4x5</code></li>
<li><code>Red</code>, <code>Green</code>, <code>Blue</code>, <code>Alpha</code>의 값은 <strong>기본적으로 1</strong>이 설정되어 있는데, *<em>이 값을 몇 배로 올리면 색상의 대비(contrast)가 커진다. *</em></li>
<li>색상을 밝게 하고 싶으면 Brightness에 양수를, 어둡게 하고 싶으면 음수를 입력한다.</li>
</ul>
</li>
</ul>
<ul>
<li>RGB 색상 대비를 2배로 변경한 예제 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/7994a6c2-b375-4544-bf6d-34484e233f19/image.png" alt=""><ul>
<li>11~14행: <strong>일차원 배열을 이차원 배열처럼 사용했다.</strong> RGB 각 색상을 2배로 했다. 색상 값을 올리면 너무 밝아보이므로 Brightness 값을 -25 정도로 낮추었다.</li>
<li>15~16행: 컬러매트릭스를 만들고, <code>페인트.setColorFilter()</code>를 통해 페인트에 적용한다. </li>
</ul>
</li>
</ul>
</br>

<h3 id="✍🏻-미니-포토샵-앱-만들기">✍🏻 미니 포토샵 앱 만들기</h3>
<h4 id="1-androidmanifestxml로-가서-하드웨어-가속기-기능-끄기">1. AndroidManifest.xml로 가서 하드웨어 가속기 기능 끄기 <img src="https://velog.velcdn.com/images/sumin_lee_317/post/db91e093-342f-4aa9-ae2e-1cf0d61dbbf2/image.png" alt=""></h4>
<h4 id="2-xml-수정하기">2. xml 수정하기</h4>
<blockquote>
<ul>
<li>바깥 리니어레이아웃 안에 2개의 리니어레이아웃 생성</li>
</ul>
</blockquote>
<ul>
<li>두 리니어레이아웃의 layout_weight는 1:9 정도로 설정</li>
<li>위쪽 리니어레이아웃에 이미지 버튼 6개 생성</li>
<li>위젯의 id를 다음과 같이 선언<ul>
<li>리니어레이아웃 : iconLayout, pictureLayout</li>
<li>이미지버튼 : ibZoomin, ibZoomout, ibRotate, ibBright, ibDark, ibGray</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/6eb0f45d-3f73-4225-aa7e-3844588d5a01/image.png" alt=""></p>
<ul>
<li>5,6,20,21행: 레이아웃의 크기(높이)를 1:9로 설정한다.</li>
<li>9~11행: 확대 이미지 버튼을 생성한다.</li>
<li>13행: 축소, 회전, 밝게하기, 어둡게하기, 회색영상 이미지버튼이 생략되었다. </li>
</ul>
<h4 id="3-java-코드-수정하기-1--mainactivityjava-코딩">3. Java 코드 수정하기 (1)  MainActivity.java 코딩</h4>
<blockquote>
<ul>
<li>이미지버튼에 대응할 6개 위젯 변수 선언</li>
</ul>
</blockquote>
<ul>
<li>MyGraphicView 클래스 변수를 선언</li>
<li><code>MyGraphicView</code> 정의 : 그림 파일을 중앙에 비트맵으로 출력</li>
<li>pictureLayout을 인플레이트한 후 MyGraphicView를 추가</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/0af32c67-1480-4bd5-994c-0dda43be075a/image.png" alt=""> <img src="https://velog.velcdn.com/images/sumin_lee_317/post/0a5e9635-431c-4709-a66c-3511efdf6ab4/image.png" alt=""></p>
<ul>
<li>2~3행: 위젯 변수 6개와 클래스 변수 1개를 전역변수로 선언한다.</li>
<li>11~13행: xml파일의 pictureLayout을 인플레이트한 후 MyGraphicView형 클래스 변수를 첨부한다. 결국 아래쪽 레이아웃에는 MyGraphicView에서 설정한 내용이 출력된다.</li>
<li>17~33행: MyGraphicView 클래스를 정의한다. (_예제9-6_과 동일)</li>
</ul>
<h4 id="3-java-코드-수정하기-2-확대-아이콘-코딩">3. Java 코드 수정하기 (2) 확대 아이콘 코딩</h4>
<blockquote>
<ul>
<li>축척에 사용될 전역변수를 선언</li>
</ul>
</blockquote>
<ul>
<li>clickIcons( ) 메소드를 정의하고 확대 아이콘 클릭 리스너를 생성</li>
<li>clickIcons( ) 메소드를 호출</li>
<li>onDraw( )에 <code>Cavas.scale( )</code> 메소드를 추가</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/cae9d295-5dfc-4ce6-8e06-fe1ffedc91dd/image.png" alt=""></p>
<ul>
<li>2행: 축척으로 사용될 전역변수 2개의 _예제9-12의 4행_에 선언한다. 22행에서 축척이 1이면 화면의 크기에는 변화가 없다. </li>
<li>5~15행: <code>clickIcons()</code> 메소드를 정의하고 확대 이미지버튼의 클릭리스너를 만든다. <strong>확대 아이콘을 클릭할 때마다 축척 전역변수가 0.2씩 증가한다.</strong> 확대를 위해서는 onDraw() 메소드를 다시 호출해야 하는데 뷰의 invalidate() 메소드는 onDraw()를 자동으로 호출해준다. _예제9-12의 16행_에 코딩한다. </li>
<li>17행: onCreate() 메소드 안에서 <code>clickIcons()</code> 메소드를 호출한다. _예제9-12의 14행_에 코딩한다. </li>
<li>20~22행: 화면(뷰)의 중앙을 구하고, 전역변수에 설정된 값으로 캔버스의 축척을 설정한다. onDraw() 메소드 내부, 즉 _예제9-12의 24행_에 코딩한다. </li>
</ul>
<blockquote>
<p>축소 아이콘도 비슷하게 코딩한다. 
이 때 <code>ibZoomin</code>은 <code>ibZoomout</code>으로, <code>+0.2f</code>는 <code>-0.2f</code>로 변경해야 한다. </p>
</blockquote>
<h4 id="3-java-코드-수정하기-3-회전-아이콘-코딩">3. Java 코드 수정하기 (3) 회전 아이콘 코딩</h4>
<blockquote>
<ul>
<li>회전에 사용될 전역변수 선언</li>
</ul>
</blockquote>
<ul>
<li>회전 아이콘 클릭 리스너 생성</li>
<li>onDraw( )에 <code>Cavas.rotate( )</code> 메소드를 추가</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/07e4db6e-8eaa-4251-982b-826c4bebf882/image.png" alt=""></p>
<ul>
<li>2행: 회전 각도로 사용될 전역변수를 <em>예제9-13의 2행</em> 다음에 선언한다. </li>
<li>5~11행: 회전하기 이미지버튼의 클릭리스너를 만든다. <strong>회전하기 아이콘을 누를 때마다 회전각도가 20씩 증가하도록 설정한다.</strong> clickIcons() 메소드 내부에 코딩한다.</li>
<li>14행: 전역변수에 설정된 각도로 캔버스를 회전시킨다. onDraw() 메소드 내부, 즉 <em>예제9-13의 22행</em> 다음에 코딩한다. </li>
</ul>
<h4 id="3-java-코드-수정하기-4-밝게하기-아이콘-코딩">3. Java 코드 수정하기 (4) 밝게하기 아이콘 코딩</h4>
<blockquote>
<ul>
<li>화면 밝기에 사용될 전역변수 선언</li>
</ul>
</blockquote>
<ul>
<li>밝게 하기 아이콘 클릭 리스너 생성</li>
<li>onDraw( )에 컬러매트릭스 적용</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/97ca9a9f-2851-4ba5-9296-f542237d94e8/image.png" alt=""></p>
<ul>
<li>2행: 색상 배수로 사용될 전역변수를 <em>예제9-14의 2행</em> 다음에  선언한다. </li>
<li>5~11행: 밝게하기 이미지버튼의 클릭리스너를 만든다. <strong>밝게하기 아이콘을 클릭할 때마다 밝기가 0.2배씩 증가하도록 설정한다.</strong> clickIcons() 메소드 내부에 코딩한다.</li>
<li>14~20행: <em>예제9-10_의 설명과 동일하다. 단, RGB값을 전역변수의 값으로 설정했다. onDraw() 메소드 내부, 즉 _예제9-14의 14행</em> 다음에 코딩한다. </li>
<li>23행: <em>예제9-12의 29행</em> *<em>drawBitmap() 메소드의 마지막 파라미터를 null에서 paint로 바꾼다. *</em></li>
</ul>
<blockquote>
<p>어둡게 하기 아이콘도 비슷하게 코딩한다. 
이 때 <code>ibBright</code>는 <code>ibDark</code>로, <code>+0.2f</code>는 <code>-0.2f</code>로 변경해야 한다. </p>
</blockquote>
<h4 id="3-java-코드-수정하기-5-흑백화-아이콘-코딩">3. Java 코드 수정하기 (5) 흑백화 아이콘 코딩</h4>
<blockquote>
<ul>
<li>채도에 사용될 전역변수 선언</li>
</ul>
</blockquote>
<ul>
<li>회색 영상 아이콘 클릭 리스너 생성</li>
<li>onDraw( )에 채도 설정 적용</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/a73382ea-45d8-4f10-bdea-1903069582bf/image.png" alt=""></p>
<ul>
<li>2행: 채도 배수로 사용될 전역변수를 선언한다. <em>예제9-15의 2행</em> 다음에 선언한다. <ul>
<li><strong>채도 <code>0</code>: 회색조 영상으로 바뀜</strong></li>
<li>채도 <code>0~1</code>: 채도 낮게 보임</li>
<li><strong>채도 <code>1</code>: 기본</strong></li>
<li>채도 <code>1 이상</code>: 채도 높게 보임</li>
</ul>
</li>
<li>5~12행: 회색영상 이미지버튼의 클릭리스너를 만든다. <strong>흑백화 아이콘을 클릭할 때마다 채도가 <code>1→0</code> 혹은 <code>0→1</code>로 변경된다.</strong> 즉, <strong>회색과 컬러가 스위칭되면서 바뀌도록</strong> 한다. clickIcons() 메소드 내부에 코딩한다.</li>
<li>15행: onDraw() 메소드 내부인 <em>예제9-15의 19~20행</em> 사이에 코딩한다. 채도의 값을 0으로 설정하면 회색영상을 만든다. 1일때는 실행하지 않는다. </li>
<li><em>채도를 바꾸는 <code>setSaturation()</code> 메소드를 실행하면 그 앞에 설정된 컬러매트릭스 값이 무시된다. 
즉, 회색영상으로 바꾸면 밝게하기/어둡게하기 아이콘이 동작하지 않는다. *</em></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Custom Vision 서비스를 사용한 이미지 분류]]></title>
            <link>https://velog.io/@sumin_lee_317/Custom-Vision-%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B6%84%EB%A5%98</link>
            <guid>https://velog.io/@sumin_lee_317/Custom-Vision-%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B6%84%EB%A5%98</guid>
            <pubDate>Sat, 19 Nov 2022 03:45:54 GMT</pubDate>
            <description><![CDATA[<p>이미지 분류는 AI(인공 지능) 애플리케이션에서 일반적인 작업입니다. 기계 학습의 예측 능력을 사용하여 AI 시스템이 이미지에 기반한 실제 항목을 식별할 수 있도록 합니다.</p>
<h2 id="이미지-분류의-사용">이미지 분류의 사용</h2>
<p>이미지 분류의 몇 가지 잠재적 용도는 다음과 같습니다.</p>
<ul>
<li><strong>제품 식별</strong>: 모바일 디바이스를 사용하여 온라인이나 매장 내에서 특정 제품의 비주얼 검색 수행.</li>
<li><strong>재해 조사</strong>: 주요 재해 대비 노력에 대한 핵심 인프라 식별. 예를 들어 항공 이미지에서 다리 및 도로 식별은 재해 완화 팀이 잘 매핑되지 않은 지역에서 미리 계획하는 데 도움이 될 수 있습니다.</li>
<li><strong>의료 진단</strong>: 엑스레이 또는 MRI 디바이스에서 이미지를 평가하면 종양으로 나타난 특정 문제 또는 의료 이미징 진단과 관련된 많은 기타 질환을 빠르게 분류할 수 있습니다.</li>
</ul>
<h2 id="개체-감지의-사용">개체 감지의 사용</h2>
<p>개체 감지의 몇 가지 샘플 애플리케이션은 다음과 같습니다.</p>
<ul>
<li><strong>건물 안전 검사</strong>: 소화기 또는 기타 비상 장비에 대한 내부 장면을 분석하여 건물의 안전성을 평가합니다.</li>
<li><strong>주행 지원</strong>: 자율 주행 차량 또는 차선 보조 기능이 있는 차량을 위한 소프트웨어 만들기 이 소프트웨어는 다른 차선에 자동차가 있는지 여부와 운전자의 자동차가 자체 차선을 벗어나지 않았는지를 감지할 수 있습니다.</li>
<li><strong>종양 감지</strong>: 의료 진단을 위해 알려진 개체를 감지할 수 있는 MRI 또는 X선 등의 의료 이미징</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/719fb1b2-5fc7-4c45-925c-5467618a508d/image.png" alt=""></p>
<p>여러 언어로 된 텍스트를 읽기 - OCR API (동기식,적은 양의 텍스트를 감지하고 읽어야 할 때</p>
<p>대용량 pdf 문서에 최적화 -  Read API (비동기적, 인쇄 및 필기 텍스트 모두에 사용)</p>
<p>구매 주문서 또는 청구서와 같은 양식에서 정보를 추출, 양식의 필드가 나타내는 의미를 이해하는 것 - Form Recognizer </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[03 Computer Vision 서비스를 사용하여 이미지 분석]]></title>
            <link>https://velog.io/@sumin_lee_317/03-Computer-Vision-%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@sumin_lee_317/03-Computer-Vision-%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B6%84%EC%84%9D</guid>
            <pubDate>Sat, 19 Nov 2022 03:10:33 GMT</pubDate>
            <description><![CDATA[<p>&#39;컴퓨터 비전&#39;은 AI의 핵심 영역 중 하나이며, AI 애플리케이션이 세상을 &quot;보고&quot; 이해할 수 있는 솔루션을 만드는 데 중점을 둔다. </p>
<p>컴퓨터에는 당연히 인간과 같은 생물학적 눈이 없지만 라이브 카메라 피드나 디지털 사진 또는 비디오로 이미지를 처리할 수 있다. 이미지를 처리하는 이 기능은 인간의 시각적 인식을 모방할 수 있는 소프트웨어를 만드는 핵심입니다.</p>
<p>컴퓨터 비전의 몇 가지 잠재적 용도는 다음과 같다.</p>
<ul>
<li><strong>콘텐츠 조직</strong>: 사진의 사람 또는 개체를 식별하고 해당 ID에 따라 구성합니다. 이와 같은 사진 인식 애플리케이션은 일반적으로 사진 스토리와 소셜 미디어 애플리케이션에서 사용됩니다.</li>
<li><strong>텍스트 추출</strong>: 텍스트가 포함된 이미지와 PDF 문서를 분석하고 텍스트를 구조적 형식으로 추출합니다.</li>
<li><strong>공간 분석</strong>: 공간에서 자동차와 같은 사람 또는 개체를 식별하고 해당 공간 내에서 이동을 매핑합니다.</li>
</ul>
<p>AI 애플리케이션에서 이미지는 픽셀 값의 배열일 뿐입니다. 이러한 숫자 값은 이미지와 그 콘텐츠를 예측하는 기계 학습 모델을 학습시키는 특징으로 사용할 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/84888877-6093-4cb9-922c-fe1c33bf55d7/image.png" alt=""></p>
<p>기계 학습 모델을 처음부터 학습시키는 것은 시간이 오래 걸리고 많은 양의 데이터가 필요할 수 있습니다. Microsoft의 Computer Vision 서비스는 미리 학습된 컴퓨터 비전 기능 액세스를 제공합니다.</p>
<h2 id="azure에서-이미지-분석-시작">Azure에서 이미지 분석 시작</h2>
<p>Computer Vision 서비스는 미리 빌드된 Computer Vision 기능을 제공하는 Microsoft Azure의 인지 서비스입니다. 
서비스는 이미지를 분석하고 이미지 및 이미지에서 묘사되는 개체에 대한 세부 정보를 반환할 수 있습니다.</p>
<h3 id="computer-vision용-azure-리소스">Computer Vision용 Azure 리소스</h3>
<p>Computer Vision 서비스를 사용하려면 Azure 구독에서 리소스를 만들어야 합니다. 
다음 리소스 유형 중 하나를 사용할 수 있습니다.</p>
<ul>
<li><strong>Computer Vision</strong>: Computer Vision 서비스에 대한 특정 리소스입니다. 다른 인지 서비스를 사용하지 않으려는 경우 또는 Computer Vision 리소스의 사용률과 비용을 별도로 추적하려는 경우 이 리소스 유형을 사용하세요.</li>
<li><strong>Cognitive Services</strong>: Text Analytics 및 Translator Text 등의 다른 많은 인지 서비스와 함께 Computer Vision을 포함하는 일반적인 인지 서비스 리소스입니다. 여러 인지 서비스를 사용할 계획이며 관리 및 개발을 단순화하려는 경우 이 리소스 유형을 사용하세요.</li>
</ul>
<p>만들려는 리소스 유형과 관계없이 사용을 위해 필요한 두 가지 정보가 제공됩니다.</p>
<ul>
<li>클라이언트 애플리케이션을 <strong>인증</strong>하는 데 사용되는 <strong>키</strong>입니다.</li>
<li><strong>리소스에 액세스</strong>할 수 있는 HTTP 주소를 제공하는 <strong>엔드포인트</strong>입니다.</li>
</ul>
<h2 id="computer-vision-service를-사용하여-이미지-분석">Computer Vision Service를 사용하여 이미지 분석</h2>
<p>구독에서 적합한 리소스를 만든 후에는 다양한 분석 작업을 수행할 수 있도록 이미지를 Computer Vision 서비스에 제출할 수 있습니다.</p>
<h3 id="1-이미지에-대한-설명">1. 이미지에 대한 설명</h3>
<p><strong>Computer Vision은 이미지를 분석하고, 감지된 개체를 평가하고, 사용자가 읽을 수 있는 구문이나 문장을 생성하여 이미지에서 감지된 내용을 설명할 수 있습니다.</strong> 
이미지 콘텐츠에 따라 서비스는 여러 개의 결과 또는 구문을 반환할 수 있습니다. 
반환된 각 구문에는 해당하는 신뢰도 점수가 있어 제공된 설명에서 알고리즘의 신뢰도를 확인할 수 있습니다. 신뢰도가 가장 높은 구문부터 먼저 나열됩니다.</p>
<p>이 개념을 이해하는 데 도움이 되도록 예를 들어 보겠습니다. 다음 뉴욕 엠파이어 스테이트 빌딩의 이미지를 살펴보세요. 반환된 구문은 신뢰도 순으로 이미지 아래에 나열됩니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/80eb541d-1691-4234-90c4-96dd2c701af2/image.png" alt=""></p>
<ul>
<li>흑백 도시 사진</li>
<li>흑백 대도시 사진</li>
<li>도시의 커다란 하얀 건물</li>
</ul>
<h3 id="2-시각적-특징-태그-지정">2. 시각적 특징 태그 지정</h3>
<p>Computer Vision에서 생성되는 이미지 설명은 수천 개의 인식 가능한 개체 집합을 기반으로 하며, 이를 사용하여 이미지에 대한 태그를 제안하는 데 사용할 수 있습니다. 이 태그는 이미지의 특성을 요약하는 메타데이터로서 이미지와 연결될 수 있습니다. 특히 특정 특성 또는 콘텐츠를 포함한 이미지를 검색하는 데 사용할 수 있는 주요 용어 집합과 함께 이미지를 인덱싱하고자 하는 경우 유용합니다.</p>
<p>예를 들어 엠파이어 스테이트 빌딩 이미지에 대해 반환되는 태그는 다음을 포함합니다.</p>
<ul>
<li>고층 건물</li>
<li>타워</li>
<li>건물</li>
</ul>
<h3 id="3-개체-감지">3. 개체 감지</h3>
<p>개체 감지 기능은 서비스에서 공통 개체를 식별할 수 있다는 점에서 태그 지정과 비슷합니다. 하지만 태그를 지정하거나 인식된 개체에 대해서만 태그를 제공하는 대신, 이 서비스는 경계 상자 좌표를 반환할 수도 있습니다. 개체 감지는 개체의 형식을 가져올 뿐만 아니라 감지된 개체의 상단, 왼쪽, 너비 및 높이를 나타내는 좌표 집합도 제공하며, 이는 다음과 같이 이미지에서 개체의 위치를 식별하는 데 사용할 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/bdcae9a5-0293-403e-93db-56536b7236f4/image.png" alt="">
를 입력합니다.</p>
<h3 id="4-브랜드-감지">4. 브랜드 감지</h3>
<p>이 기능은 상용 브랜드를 식별하는 기능을 제공합니다. 서비스에는 전 세계적으로 인식된 수천 개의 상용 제품 브랜드 로고가 포함된 데이터베이스가 있습니다.</p>
<p>서비스를 호출하고 이미지를 전달하면 이 기능은 감지 작업을 수행하고 이미지의 식별된 개체가 인식된 브랜드인지 확인합니다. 서비스는 의류, 전자 제품 등 다양한 범주에 속하는 인기 브랜드 데이터베이스와 브랜드를 비교합니다. 알려진 브랜드가 감지되면 서비스는 브랜드 이름, 신뢰도 점수(0~1, 식별 결과의 긍정도를 나타냄), 이미지에서 감지된 브랜드가 있는 위치의 경계 상자(좌표)를 반환합니다.</p>
<p>예를 들어 다음 이미지의 노트북 덮개에는 Microsoft 로고가 있으며, Computer Vision 서비스에서 이를 식별했습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/c59af338-2f16-463e-8723-4fbedf02f64e/image.png" alt=""></p>
<h3 id="5-얼굴-감지">5. 얼굴 감지</h3>
<p>Computer Vision 서비스는 이미지에서 사람의 얼굴을 감지 및 분석할 수 있습니다 여기에는 나이와 얼굴의 위치를 나타내는 사각형 경계 상자의 위치를 결정하는 기능 또한 포함되어 있습니다. Computer Vision 서비스의 얼굴 분석 기능은 전용 Face 서비스에서 제공하는 하위 기능입니다. 일반 이미지 분석 기능과 결합된 기본적인 얼굴 감지 및 분석이 필요한 경우 Computer Vision 서비스를 사용할 수 있습니다. 하지만 더욱 포괄적인 얼굴 분석 및 얼굴 인식 기능을 사용하려면 Face 서비스를 사용해야 합니다.</p>
<p>다음 예제에서는 사람의 이미지에서 얼굴을 감지하고 대략적인 나이를 추정하는 것을 보여줍니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/e5b377a9-ffe2-46a4-b0e0-88ca5e2acea9/image.png" alt=""></p>
<h3 id="6-이미지-분류">6. 이미지 분류</h3>
<p>Computer Vision은 콘텐츠를 기준으로 이미지를 분류할 수 있습니다. 
서비스는 &quot;현재&quot; 제한되어 있는 범주 집합을 포함한 부모/자식 계층 구조를 사용합니다.
이미지를 분석할 때 감지된 개체가 기존 범주와 비교되어 분류를 제공하는 최적의 방법이 결정됩니다. 
부모 범주 중 하나로는 <code>people_</code>이 있습니다. 지붕 위에 있는 사람의 이미지에는 <code>people_</code> 범주가 할당됩니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/ba7abf67-af14-4b5b-b558-43a8de8e5682/image.png" alt="">
다음 이미지에 대해서는 약간 다른 분류가 반환되는데, 이미지 안에 여러 명의 사람이 있으므로 <code>people_group</code> 범주가 할당됩니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/bba58a48-bfd0-4c1d-bd03-48dcd6da63f3/image.png" alt="">
<a href="https://learn.microsoft.com/ko-kr/azure/cognitive-services/computer-vision/category-taxonomy">여기</a>에서 86개의 범주 목록을 검토하세요.</p>
<h3 id="7-도메인별-콘텐츠-감지">7. 도메인별 콘텐츠 감지</h3>
<p>이미지를 분류할 때 Computer Vision 서비스는 다음과 같은 두 가지 특수 도메인 모델을 지원합니다.</p>
<ul>
<li><strong>유명인</strong> - 이 서비스에는 스포츠, 엔터테인먼트 및 비즈니스 분야에서 잘 알려진 수천 명의 유명인을 식별하도록 학습된 모델이 포함되어 있습니다.</li>
<li><strong>랜드마크</strong> - 이 서비스는 타지마할 및 자유의 여신상 같은 유명 랜드마크를 식별할 수 있습니다.</li>
</ul>
<p>예를 들어 다음 이미지에서 랜드마크를 분석할 때 Computer Vision 서비스는 에펠탑을 99.41%의 신뢰도로 식별합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/73f7dc04-8c51-46c8-b932-1a5cbadea4a4/image.png" alt=""></p>
<h3 id="8-광학-인식">8. 광학 인식</h3>
<p>Computer Vision 서비스는 OCR(광학 인식) 기능을 사용하여 <strong>이미지에서 인쇄 및 필기 텍스트를 감지</strong>할 수 있습니다. 이 기능에 대해 살펴보려면 Microsoft Learn의 Computer Vision 서비스로 텍스트 읽기 모듈을 참조하세요.</p>
<h3 id="9-추가-기능">9. 추가 기능</h3>
<p>이러한 기능 외에도 Computer Vision 서비스는 다음을 수행할 수 있습니다.</p>
<ul>
<li>이미지 유형 감지 - 클립 아트 이미지 또는 선 그리기를 식별합니다.</li>
<li>이미지 색 구성표 감지 - 특히 이미지의 주요 전경, 배경 및 전체 색을 식별합니다.</li>
<li>썸네일 생성 - 이미지의 작은 버전을 생성합니다.</li>
<li>일반 콘텐츠 - 성인용 콘텐츠를 포함하거나 잔인한 장면을 묘사하는 이미지를 감지합니다.</li>
</ul>
<hr>
<h2 id="연습---computer-vision-서비스를-사용하여-이미지-분석">연습 - Computer Vision 서비스를 사용하여 이미지 분석</h2>
<p>Computer Vision 인지 서비스는 미리 학습된 기계 학습 모델을 사용하여 이미지를 분석하고 이미지에 대한 정보를 추출합니다.</p>
<p>예를 들어 가상의 소매점인 Northwind Traders가 AI 서비스에서 매장을 모니터링하여 도움이 필요한 고객을 식별하고 직원에게 도움을 주도록 지시하는 &quot;스마트 스토어&quot;를 구현하기로 결정했다고 가정해 보겠습니다. Computer Vision 서비스를 사용하면 매장 전체의 카메라에서 촬영한 이미지를 분석하여 해당 이미지가 나타내는 내용에 대해 의미 있는 설명을 제공할 수 있습니다.</p>
<p>이 랩에서는 간단한 명령줄 애플리케이션을 사용하여 Computer Vision 서비스가 작동하는 모습을 확인합니다. 웹 사이트 또는 휴대폰 앱과 같은 실제 솔루션에는 동일한 원칙과 기능이 적용됩니다.</p>
<h3 id="cognitive-services-리소스-만들기">Cognitive Services 리소스 만들기</h3>
<p>Computer Vision 리소스 또는 Cognitive Services 리소스를 생성하여 Computer Vision 서비스를 사용할 수 있습니다.</p>
<p>아직 만들지 않았다면 Azure 구독에서 Cognitive Services 리소스를 만듭니다.</p>
<ol>
<li><p>다른 브라우저 탭의 <a href="https://portal.azure.com%EC%97%90%EC%84%9C">https://portal.azure.com에서</a> Azure Portal을 열고 Microsoft 계정을 사용하여 로그인합니다.</p>
</li>
<li><p><code>＋리소스 만들기</code> 단추를 클릭하고, Cognitive Services를 검색하고, 다음 설정을 통해 Cognitive Services 리소스를 만듭니다.</p>
</li>
</ol>
<ul>
<li>구독: 자신의 Azure 구독.</li>
<li>리소스 그룹: 고유한 이름이 있는 리소스 그룹을 선택하거나 생성합니다.</li>
<li>지역: 사용 가능한 지역을 선택합니다.</li>
<li>이름: 고유한 이름을 입력합니다.</li>
<li>가격 책정 계층: S0</li>
<li>공지를 읽고 이해했음을 확인함: 선택되었습니다.</li>
</ul>
<ol start="3">
<li><p>리소스를 검토 및 만들고 배포가 완료될 때까지 기다립니다. 그런 다음, 배포된 리소스로 이동합니다.</p>
</li>
<li><p>Cognitive Services 리소스에 대한 <strong>키 및 엔드포인트</strong> 페이지를 봅니다. 클라이언트 애플리케이션에서 연결하려면 엔드포인트와 키가 필요합니다.</p>
</li>
</ol>
<h3 id="cloud-shell-실행">Cloud Shell 실행</h3>
<p>Computer Vision 서비스의 기능을 테스트하기 위해 Azure의 Cloud Shell에서 실행되는 간단한 명령줄 애플리케이션을 사용합니다.</p>
<ol>
<li>Azure Portal에서 검색 상자 오른쪽 페이지 맨 위에 있는 <code>[&gt;_]</code>(Cloud Shell) 단추를 선택합니다. 그러면 포털 아래쪽에 Cloud Shell 창이 열립니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/60638e57-fe66-4241-86aa-9b9d265ef6db/image.png" alt=""></li>
<li>Cloud Shell을 처음 열면 사용할 셸 유형(Bash 또는 PowerShell)을 선택하라는 메시지가 표시될 수 있습니다. <strong>PowerShell</strong>을 선택합니다. 이 옵션이 표시되지 않으면 단계를 건너뜁니다.</li>
<li>Cloud Shell에 대한 스토리지를 만들라는 메시지가 표시되면 구독이 지정되었는지 확인하고 <strong>스토리지 만들기</strong>를 선택합니다. 그런 다음, 스토리지가 만들어질 때까지 1분 정도 기다립니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/8dfa0aff-068c-49c9-a584-b0d2cd0b1469/image.png" alt=""></li>
<li>Cloud Shell 창의 왼쪽 위에 표시된 셸 형식이 PowerShell로 전환되었는지 확인합니다. Bash인 경우 드롭다운 메뉴를 사용하여 PowerShell로 전환합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/4a7c4307-11e9-43fc-88c9-b48b55087623/image.png" alt=""></li>
<li>PowerShell이 시작될 때까지 기다립니다. Azure Portal에 다음 화면이 표시되어야 합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/e2a3c7f1-8a9a-4a8c-951e-8bb3ec846ab3/image.png" alt=""></li>
</ol>
<h3 id="클라이언트-애플리케이션-구성-및-실행">클라이언트 애플리케이션 구성 및 실행</h3>
<p>이제 Cloud Shell 환경이 생겼으므로 Computer Vision 서비스를 사용하여 이미지를 분석하는 간단한 애플리케이션을 실행할 수 있습니다.</p>
<ol>
<li><p>명령 셸에서 다음 명령을 입력하여 샘플 애플리케이션을 다운로드하고 ai-900이라는 폴더에 저장합니다.</p>
<pre><code class="language-bash">git clone https://github.com/MicrosoftLearning/AI-900-AIFundamentals ai-900</code></pre>
</li>
<li><p>파일은 ai-900이라는 폴더에 다운로드됩니다. 이제 Cloud Shell 스토리지에 있는 모든 파일을 보고 작업하려고 합니다. 셸에 다음 명령을 입력합니다.</p>
<pre><code class="language-bash">code .</code></pre>
<p>그러면 아래 이미지와 같은 편집기가 열립니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/ed4501bf-d6d2-4eb2-8aff-1d48cdbb7018/image.png" alt=""></p>
</li>
<li><p>왼쪽의 Files 창에서 ai-900을 확장하고 analyze-image.ps1을 선택합니다. 이 파일에는 다음과 같이 Computer Vision 서비스를 사용하여 이미지를 분석하는 일부 코드가 포함되어 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/e0fb7bd6-d7eb-4a0f-bd40-d9351773ea06/image.png" alt=""></p>
</li>
<li><p>코드에 대해 너무 걱정하지 마세요. 중요한 점은 엔드포인트 URL과 Cognitive Services 리소스의 키 중 하나가 필요하다는 것입니다. Azure Portal의 리소스에 대한 키 및 엔드포인트 페이지에서 이러한 값을 복사하여 코드 편집기에 붙여넣고 각각 YOUR_KEY 및 YOUR_ENDPOINT 자리 표시자 값을 대체합니다.
키 및 엔드포인트 값을 붙여넣은 후 코드의 처음 두 줄은 다음과 유사하게 표시됩니다.</p>
<pre><code># PowerShell
$key=&quot;1a2b3c4d5e6f7g8h9i0j....&quot;    
$endpoint=&quot;https...&quot;</code></pre></li>
<li><p>편집기 창의 오른쪽 위에서 <code>...</code> 단추를 사용하여 메뉴를 열고 저장을 선택하여 변경 내용을 저장합니다.
샘플 클라이언트 애플리케이션은 Computer Vision 서비스를 사용하여 Northwind Traders 스토어의 카메라로 촬영한 다음 이미지를 분석합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/39cf087d-80df-4f74-a7dd-c558751e3f36/image.png" alt=""></p>
</li>
<li><p>PowerShell 창에서 다음 명령을 입력하여 코드를 실행합니다.</p>
<pre><code class="language-bash">cd ai-900
./analyze-image.ps1 store-camera-1.jpg</code></pre>
</li>
<li><p>다음을 포함하는 이미지 분석 결과를 검토합니다.</p>
</li>
</ol>
<ul>
<li>이미지를 설명하는 제안된 캡션입니다.</li>
<li>이미지에서 식별된 개체 목록입니다.</li>
<li>이미지와 관련된 &quot;태그&quot; 목록입니다.</li>
</ul>
<ol start="8">
<li><p>이제 다른 이미지를 사용해 보겠습니다.
<img src="https://velog.velcdn.com/images/sumin_lee_317/post/e02a3ca6-a3ef-4789-b843-14512d4b4e38/image.png" alt="">
두 번째 이미지를 분석하려면 <code>./analyze-image.ps1 store-camera-2.jpg</code> 명령을 입력합니다.</p>
</li>
<li><p>두 번째 이미지에 대한 이미지 분석 결과를 검토합니다.</p>
</li>
<li><p>한 번 더 시도해 보겠습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/348fd6ee-64af-4f55-a8e2-9440038447fa/image.png" alt="">
세 번째 이미지를 분석하려면 <code>./analyze-image.ps1 store-camera-3.jpg</code> 명령을 입력합니다.</p>
</li>
<li><p>세 번째 이미지에 대한 이미지 분석 결과를 검토합니다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[02 Azure Machine Learning에서 자동화된 기계 학습 사용]]></title>
            <link>https://velog.io/@sumin_lee_317/Azure-Machine-Learning%EC%97%90%EC%84%9C-%EC%9E%90%EB%8F%99%ED%99%94%EB%90%9C-%EA%B8%B0%EA%B3%84-%ED%95%99%EC%8A%B5-%EC%82%AC%EC%9A%A9</link>
            <guid>https://velog.io/@sumin_lee_317/Azure-Machine-Learning%EC%97%90%EC%84%9C-%EC%9E%90%EB%8F%99%ED%99%94%EB%90%9C-%EA%B8%B0%EA%B3%84-%ED%95%99%EC%8A%B5-%EC%82%AC%EC%9A%A9</guid>
            <pubDate>Fri, 18 Nov 2022 19:40:08 GMT</pubDate>
            <description><![CDATA[<h2 id="기계학습이란">기계학습이란?</h2>
<p>Machine Learning은 수학 및 통계를 사용하여 <strong>알 수 없는 값을 예측할 수 있는 모델</strong>을 만드는 기술이다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/4fee8965-e21b-4793-acfa-8a196199fe0c/image.png" alt=""></p>
<p>예를 들어, Adventure Works Cycles는 한 도시에서 자전거를 대여해주는 기업입니다. 이 회사는 충분한 스텝 인원과 자전거 양을 확보하기 위해 이전 데이터를 활용하여 하루 대여 수요를 예측할 수 있는 모델을 학습시켰습니다.</p>
<p>이를 위해 Advaenture Works는 특정 날에 대한 정보(요일, 예상 날씨 상황 등)를 입력값으로 받고 예상되는 대여 수를 출력값으로 하여 예측하는 기계 학습 모델을 만들 수 있었습니다.</p>
<p>수학적으로는 기계 학습을 항목에 대한 하나 이상의 기능(x라고 하겠습니다)에 연산을 수행하여 예측된 레이블(y)을 계산하는 함수(f라고 하겠습니다)를 정의하는 방법이라고 생각할 수 있습니다. 즉 다음과 같습니다.</p>
<blockquote>
<p>f(x) = y</p>
</blockquote>
<p>이 자전거 대여 예제에서는 지정된 날에 대한 세부 정보(요일, 날씨 등)가 기능(x)이고, 해당 날의 대여 수가 레이블(y)이고, 해당 날에 대한 정보를 기준으로 대여 수를 계산하는 함수(f)가 기계 학습 모델에 캡슐화됩니다.</p>
<p>f함수가 y를 계산하기 위해 x에 대해 수행하는 특정 연산은 만들려는 모델의 유형과 모델을 학습시키는 데 사용되는 특정 알고리즘을 비롯한 다양한 요인에 따라 달라집니다. 또한 대부분의 경우 기계 학습 모델을 학습시키는 데 사용되는 데이터에는 모델 학습을 수행하기 전에 몇 가지 전처리가 필요합니다.</p>
<h2 id="기계학습-유형">기계학습 유형</h2>
<p>기계 학습에는 감독 및 감독되지 않는 기계 학습에 대한 두 가지 일반적인 접근 방식이 있습니다. 두 방법 모두에서 예측을 수행하는 모델을 학습시킵니다.</p>
<p><strong>감독되는 기계 학습(지도학습)</strong> 접근 방식을 사용하려면 알려진 레이블 값이 있는 데이터 세트로 시작해야 합니다. 감독되는 기계 학습 작업의 두 가지 유형에는 회귀 및 분류가 포함됩니다.</p>
<ul>
<li><strong>회귀</strong>: 가격, 판매 총액 또는 기타 측정값 등의 <strong>연속 값(숫자값)을 예측</strong>하는 데 사용됩니다.</li>
<li><strong>분류</strong>: 환자가 당뇨병을 앓고 있는지 여부와 같은 이진 <strong>클래스 레이블을 결정</strong>하는 데 사용됩니다. (항목이 속한 레이블=범주=클래스를 예측하는 것)</li>
</ul>
<p><strong>감독되지 않은 기계 학습(비지도학습)</strong> 방법은 알려진 <strong>레이블 값이 없는 데이터 세트로 시작</strong>합니다. 감독되지 않은 기계 학습을 한 유형이 클러스터링입니다.</p>
<ul>
<li><strong>클러스터링</strong>: 조류의 측정값을 종으로 그룹화하는 경우처럼 유사한 정보를 레이블 그룹으로 <strong>그룹화하여 레이블을 결정</strong>하는 데 사용됩니다.</li>
</ul>
<h2 id="azure-machine-learning-studio">Azure Machine Learning Studio</h2>
<p>효과적인 기계 학습 모델을 학습시키고 배포하려면 시간과 리소스가 많이 필요한 많은 작업을 수행해야 한다. Azure Machine Learning은 일부 태스크를 간소화하며, 데이터를 준비하고, 모델을 학습시키고, 예측 서비스를 배포하는 클라우드 기반 서비스이다.</p>
<p>Azure Machine Learning은 학습 모델과 관련된 많은 시간이 소요되는 태스크를 <strong>자동화</strong>하여 데이터 과학자가 효율성을 높이도록 지원하며, <strong>실제로 사용되는 경우에만 비용을 발생</strong>시키면서 대량의 데이터를 효과적으로 처리하도록 확장되는 <strong>클라우드 기반</strong> 컴퓨팅 리소스를 사용할 수 있도록 한다.</p>
<h3 id="azure-machine-learning-작업-영역">Azure Machine Learning 작업 영역</h3>
<p>Azure Machine Learning을 사용하려면 먼저 Azure 구독에서 작업 영역 리소스를 만듭니다. 그런 다음 이 작업 영역을 사용하여 데이터, 컴퓨팅 리소스, 코드, 모델 및 기계 학습 워크로드와 관련된 기타 아티팩트를 관리할 수 있습니다.</p>
<p>Azure Machine Learning 작업 영역을 만든 후 개발자 도구 또는 Azure Machine Learning 스튜디오 웹 포털을 통해 Azure Machine Learning Service를 사용하여 솔루션을 개발할 수 있습니다.</p>
<h3 id="azure-machine-learning-studio-1">Azure Machine Learning Studio</h3>
<p>Azure Machine Learning 스튜디오는 Azure의 <strong>기계 학습 솔루션을 위한 웹 포털</strong>이다. 여기에는 데이터 전문가들이 데이터 준비, 모델 학습, 예측 서비스 론칭 및 사용량 모니터 등에 필요한 여러 기능과 역량들이 포함되어 있습니다. 웹 포털 사용을 시작하려면 Azure Portal에서 만든 작업 영역을 Azure Machine Learning 스튜디오에 할당해야 한다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/fd1beac5-c426-4762-b64c-4e0986ca98b9/image.png" alt=""></p>
<h3 id="azure-machine-learning-컴퓨팅">Azure Machine Learning 컴퓨팅</h3>
<p>핵심은 Azure Machine Learning이 기계 학습 모델을 학습시키고 관리하기 위한 서비스이므로 학습 프로세스를 실행하기 위해 컴퓨팅이 필요하다는 사실입니다.</p>
<p>컴퓨팅 대상은 모델 학습 및 데이터 탐색 프로세스를 실행할 수 있는 클라우드 기반 리소스입니다.</p>
<p>Azure Machine Learning 스튜디오에서 데이터 과학 활동에 대한 컴퓨팅 대상을 관리할 수 있습니다. 다음 네 가지 종류의 컴퓨팅 리소스를 만들 수 있습니다.</p>
<ul>
<li><strong>컴퓨팅 인스턴스</strong>: 데이터 과학자가 데이터 및 모델을 작업하는 데 사용할 수 있는 <strong>개발 워크스테이션</strong>입니다.</li>
<li><strong>컴퓨팅 클러스터</strong>: 실험 코드의 <strong>주문형 처리</strong>를 지원하는 확장 가능한 <strong>가상 머신 클러스터</strong>입니다.</li>
<li><strong>유추 클러스터</strong>: 학습된 모델을 사용하는 예측 서비스의 <strong>배포 대상</strong>입니다.</li>
<li><strong>연결된 컴퓨팅</strong>: Virtual Machines 또는 Azure Databricks 클러스터와 같은 기존 Azure 컴퓨팅 리소스에 연결합니다.</li>
</ul>
<h3 id="azure-자동화된-machine-learning이란">Azure 자동화된 Machine Learning이란?</h3>
<p>Azure Machine Learning에는 여러 전처리 기술과 모델 학습 알고리즘을 자동으로 <strong>병렬 처리</strong>하는 <strong>‘자동화된 기계 학습’ 기능</strong>이 포함되어 있습니다. 자동화된 기능은 클라우드 컴퓨팅 능력을 사용하여 데이터에 대한 최고 성능의 감독 모드 기계 학습 모델을 찾습니다.</p>
<p><strong>자동화된 기계 학습을 사용하면 방대한 데이터 과학 또는 프로그래밍 지식 없이도 모델을 학습시킬 수 있습니다.</strong> 데이터 과학 및 프로그래밍에 대한 배경 지식이 있는 분들에게는 알고리즘 선택 및 하이퍼 매개 변수 튜닝을 자동화하여 시간과 리소스를 절약하는 방법을 제공합니다.</p>
<p>Azure Machine Learning 스튜디오에서 자동화된 기계 학습 작업을 만들 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/c4d93c2e-e8a5-4b62-b47b-9a57b4a37368/image.png" alt=""></p>
<p>Azure Machine Learning에서 실행할 수 있는 조작을 <strong>작업</strong>이라고 합니다. 자동화된 기계 학습 실행을 시작하기 전에 작업에 대한 여러 설정을 구성할 수 있습니다. 실행 구성은 학습 스크립트, 컴퓨팅 대상 및 Azure ML 환경을 지정하고 학습 작업을 실행하는 데 필요한 정보를 제공합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/1ff39a54-5752-4450-ace6-97ff1e1ab3e2/image.png" alt=""></p>
<h3 id="automl-프로세스-이해">AutoML 프로세스 이해</h3>
<ol>
<li><strong>데이터 준비</strong>: 데이터 집합의 기능 및 레이블을 식별합니다. 필요에 따라 데이터를 사전 처리 또는 정리 및 변환합니다.</li>
<li><strong>모델 학습</strong>: 데이터를 학습 및 유효성 검사 집합이라는 두 그룹으로 분할합니다. 학습 데이터 집합을 사용하여 기계 학습 모델을 학습시킵니다. 유효성 검사 데이터 집합을 사용하여 기계 학습 모델에서 성능을 테스트합니다.</li>
<li><strong>성능 평가</strong>: 모델의 예측이 알려진 레이블과 얼마나 가까운지 비교합니다.</li>
<li><strong>예측 서비스 배포</strong>: 기계 학습 모델을 학습시킨 후 다른 사용자가 사용할 수 있도록 서버 또는 디바이스에 애플리케이션으로 모델을 배포할 수 있습니다.</li>
</ol>
<p>이는 Azure Machine Learning을 사용한 자동화된 기계 학습 프로세스와 동일한 단계입니다.</p>
<h4 id="데이터-준비">데이터 준비</h4>
<p>기계 학습 모델은 기존 데이터로 학습시켜야 합니다. 데이터 전문가들 데이터를 탐색 및 전처리하고, 다양한 유형의 모델 학습 알고리즘을 사용하여 정확한 모델을 생성하는 데 많은 노력을 기울입니다. 이러한 작업은 시간이 많이 걸리며 비용이 많이 드는 컴퓨팅 하드웨어가 비효율적으로 사용되는 경우도 많습니다.</p>
<p>Azure Machine Learning에서 모델 학습 및 기타 작업의 데이터는 주로 데이터 세트라는 개체에 캡슐화됩니다. Azure Machine Learning 스튜디오에서 사용자 고유의 데이터 세트를 만들 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/e5c8fe46-a449-4933-bcc3-5377d04670ac/image.png" alt=""></p>
<h4 id="모델-학습">모델 학습</h4>
<p>Azure Machine Learning의 자동화된 Machine Learning 기능은 지도학습 모델, 즉 학습 데이터가 알려진 레이블 값을 포함하는 모델을 지원합니다. 
자동화된 Machine Learning을 사용하여 다음에 대한 모델을 학습시킬 수 있습니다.</p>
<ul>
<li><strong>분류</strong>(범주 또는 클래스 예측)</li>
<li><strong>회귀</strong>(숫자 값 예측)</li>
<li><strong>시계열 예측</strong>(미래 시점의 숫자 값 예측)</li>
</ul>
<p>자동화된 Machine Learning에서는 여러 작업 유형 중에서 선택할 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/e1cfd197-f9c1-416d-9d74-2a780f9fa74d/image.png" alt=""></p>
<p>자동화된 Machine Learning에서 기본 메트릭에 대한 구성, 학습에 사용되는 모델 유형, 종료 기준 및 동시성 한도를 선택할 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/7ce980b9-53dd-4667-a967-50028631da22/image.png" alt=""></p>
<p>중요한 것은 AutoML이 데이터를 학습 집합 및 유효성 검사 집합으로 분할한다는 점입니다. 작업을 실행하기 전에 설정에서 세부 정보를 구성할 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/518bd5c8-f0b1-4e5a-8531-283231d3b676/image.png" alt=""></p>
<h4 id="성능-평가">성능 평가</h4>
<p>작업이 완료된 후 최고 성능의 모델을 검토할 수 있습니다. 예제에서는 종료 기준을 사용하여 작업을 중지했습니다. 따라서 작업에서 생성된 “최적” 모델은 가능한 최적 모델이 아니라 이 연습에 허용된 시간 내에서 발견된 최적 모델일 수 있습니다.</p>
<p>최적 모델은 지정한 평가 메트릭인 ‘정규화된 평균 제곱 오차’를 기준으로 확인됩니다.</p>
<p>교차 유효성 검사라는 기술이 평가 메트릭을 계산하는 데 사용됩니다. 일부 데이터를 사용하여 모델을 학습시킨 후 나머지 부분을 사용하여 학습된 모델에 대한 반복 테스트 또는 교차 유효성 검사를 수행합니다. 테스트의 예측 값을 알려진 실제 값 또는 레이블과 비교하여 메트릭을 계산합니다.</p>
<p><strong>예측 값과 실제 값의 차이</strong>를 <strong>‘오차’</strong> 라고 하며, <strong>모델의 ‘오류’ 양</strong>을 나타냅니다. 성능 메트릭 RMSE(정규화된 평균제곱 오차)는 모든 테스트 사례의 오류를 제곱하고 이러한 제곱의 평균을 찾은 다음, 제곱근을 구하여 계산됩니다. 따라서 이 값이 작을수록 모델이 더 정확하게 예측하는 것입니다. 
<strong>NRMSE(정규화된 평균제곱 오차)</strong> 는 RMSE 메트릭을 표준화하므로 <strong>척도가 서로 다른 변수가 있는 모델 간 비교에 사용할 수 있습니다.</strong></p>
<p><strong>잔차 히스토그램</strong>은 <strong>잔차 값 범위의 빈도</strong>를 보여 줍니다. 오차는 모델에서 설명할 수 없는 예측 값과 실제 값의 차이, 즉 오류를 나타냅니다. 가장 자주 발생하는 오차 값이 0 주위에 클러스터링되어야 합니다. 오류가 적고, 특히 양 극단의 오류는 거의 없는 것이 좋습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/a15f3830-3db7-4cb0-8104-abcd402bc34f/image.png" alt=""></p>
<p><strong>예측 값 및 참 값 차트</strong>는 예측 값이 참 값과 밀접하게 상호 연관되는 <strong>대각선 추세를 표시</strong>합니다. 점선은 완벽한 모델의 성능을 보여 줍니다. <strong>모델의 평균 예측 값 선이 점선에 가까울수록 성능이 더 높은 것입니다.</strong> 꺾은선형 차트 아래의 히스토그램은 참 값의 분포를 보여 줍니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/22f4a3e7-c5df-4cc4-9976-c3e5a728b66d/image.png" alt=""></p>
<p>자동화된 기계 학습을 사용하여 일부 모델을 학습시킨 후에는 클라이언트 애플리케이션에서 사용할 수 있는 최상의 모델을 서비스로 배포할 수 있습니다.</p>
<h2 id="예측-서비스-배포">예측 서비스 배포</h2>
<p>Azure Machine Learning에서 서비스를 ACI(Azure Container Instances) 또는 AKS(Azure Kubernetes Service) 클러스터로 배포할 수 있습니다. 프로덕션 시나리오의 경우 AKS를 배포하는 것이 좋습니다 .이 경우 유추 클러스터 컴퓨팅 대상을 만들어야 합니다. 이 연습에서는 테스트에 적합한 배포 대상인 ACI 서비스를 사용하며, 유추 클러스터를 만들 필요가 없습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Azure에서 AI 시작]]></title>
            <link>https://velog.io/@sumin_lee_317/Azure%EC%97%90%EC%84%9C-AI-%EC%8B%9C%EC%9E%91</link>
            <guid>https://velog.io/@sumin_lee_317/Azure%EC%97%90%EC%84%9C-AI-%EC%8B%9C%EC%9E%91</guid>
            <pubDate>Fri, 18 Nov 2022 13:33:20 GMT</pubDate>
            <description><![CDATA[<h2 id="ai란-무엇인가">AI란 무엇인가?</h2>
<p>간단히 말해서, AI는 인간의 행동과 기능을 모방하는 소프트웨어를 만드는 것이다. 
주요 워크로드는 다음과 같다.</p>
<ul>
<li><strong>기계학습</strong> : 이것은 종종 AI 시스템의 기초이며, <strong>예측</strong>하고 데이터에서 <strong>결론을 도출</strong>하기 위해 <strong>컴퓨터 모델을 &quot;가르치는&quot; 방법</strong>이다.</li>
<li><strong>변칙 검색</strong> : 시스템에서 <strong>오류</strong> 또는 <strong>비정상적인 활동을 자동으로 감지</strong>할 수 있는 기능이다.</li>
<li><strong>Computer Vision</strong> : 카메라, 비디오 및 이미지를 통해 세계를 <strong>시각적</strong>으로 해석할 수 있는 소프트웨어 기능이다. </li>
<li><strong>자연어 처리</strong> : 컴퓨터가 서면 또는 음성 <strong>언어를 해석</strong>하고 동일하게 <strong>응답</strong>할 수 있는 기능이다. </li>
<li><strong>지식 마이닝</strong> : 종종 대용량의 <strong>비정형 데이터</strong>에서 정보를 추출하여 <strong>검색 가능한 지식 저장소</strong>를 만드는 기능이다. </li>
</ul>
<h2 id="기계학습-machine-learning">기계학습 (machine-learning)</h2>
<blockquote>
<p>기계학습의 실전 적용 예시
AI를 사용하여 현지의 빛, 바람, 비 등을 예측할 수 있어 농부는 파종하고 물을 대고 수확할 시기를 판단할 수 있다. </p>
</blockquote>
<h3 id="기계학습-작동-방법">기계학습 작동 방법</h3>
<p>기계는 데이터로부터 학습한다. 
오늘날 우리는 일상 생활을 하면서 엄청난 양의 데이터를 생성한다. 
문자 메세지, 메일, SNS 게시물부터 휴대폰으로 찍은 사진 및 동영상까지 전송한다. 
또한, 우리는 엄청난 양의 정보를 생성한다. 
여전히 가정, 자동차, 도시, 대중교통 인프라 및 공장의 수백만 개의 센서에 의해 많은 데이터가 생성된다. </p>
<p>데이터 과학자는 데이터에서 찾은 관계를 기반으로 예측 및 추론을 할 수 있는 모델을 모든 데이터를 사용하여 학습시킬 수 있다. </p>
<p>예를 들어, 환경보호 조직이 &#39;자원봉사자가 휴대폰 앱을 사용하여 다양한 종류의 야생화를 식별하고 카탈로그화하길 원한다&#39;고 가정해 보자. 
다음 사진에서는 이런 시나리오를 활성화하기 위해 어떻게 기계학습이 사용될 수 있는 지를 보여준다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/6b81f0cf-3aac-439f-9f41-02c007530e4f/image.gif" alt=""></p>
<ol>
<li>야생화 샘플에 대한 데이터를 수집하는 식물학자와 과학자로 구성된 팀</li>
<li>팀은 샘플을 종별로 정확히 분류하여 레이블을 지정한다.</li>
<li>레이블이 지정된 데이터는 샘플의 특징과 레이블이 지정된 종 사이의 관계를 찾는 알고리즘을 사용하여 처리된다.</li>
<li>알고리즘의 결과는 모델에 요약된다.</li>
<li>자원봉사자에 의해 새로운 샘플이 발견되면 모델을 올바른 종 레이블을 식별할 수 있다.</li>
</ol>
<h3 id="microsoft-azure의-machine-learning">Microsoft Azure의 Machine Learning</h3>
<p>Microsoft Azure는 <strong>기계학습 모델을 생성, 관리 및 게시하기 위한 클라우드 기반 플랫폼</strong>인 <strong>Azure Machine Learning 서비스</strong>를 제공한다. 
Azure Machine Learning의 특징과 기능은 다음과 같다.</p>
<table>
<thead>
<tr>
<th>특징</th>
<th>기능</th>
</tr>
</thead>
<tbody><tr>
<td>자동화된 기계학습</td>
<td>이 기능은 비전문가도 데이터를 활용해 효과적인 기계학습 모델을 빠르게 만들 수 있도록 지원한다.</td>
</tr>
<tr>
<td>Azure Machine Learning 디자이너</td>
<td>코딩 작업없이 기계학습 솔루션을 개발할 수 있는 GUI</td>
</tr>
<tr>
<td>데이터 및 컴퓨턱 관리</td>
<td>전문적인 데이터 과학자들이 데이터 실험 코드를 대규모로 실행하기 위해 활용할 수 있는 클라우드 기반 데이터 스토리지 및 컴퓨팅 리소스</td>
</tr>
<tr>
<td>파이프라인</td>
<td>데이터 과학자, 소프트웨어 엔지니어 및 IT 운영 전문가들이 모델 교육, 배포 및 관리 작업을 구성할 수 있는 파이프라인을 정의 가능</td>
</tr>
</tbody></table>
<h2 id="변칙-검색-anomaly-detection">변칙 검색 (anomaly-detection)</h2>
<ul>
<li>신용카드 트랜잭션(거래내역)을 모니터링하고 사기 행위를 나타낼 수 있는 비정상적인 사용 패턴을 감지하는 소프트웨어 시스템</li>
<li>자동화된 프로덕션 라인에서 활동을 추적하고 오류를 식별하는 애플리케이션</li>
<li>센서를 사용하여 잠재적인 기계 고장을 엔지니어에게 사전 경고하는 레이싱 자동차 원격 분석 시스템</li>
</ul>
<p>이러한 종류의 시나리오는 <strong>시간에 따라 데이터를 분석하고 비정상적인 변경을 식별하는 기계학습 기반 기술</strong>인 &#39;anomaly-detection&#39;을 사용해 해결할 수 있다.</p>
<p>레이싱 자동차 시나리오에서 변칙 검색이 어떻게 사용되는지 살펴보자. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/9a1bc785-59ca-459d-ab63-66c12f131163/image.gif" alt=""></p>
<ol>
<li>차량 센서는 엔진 회전, 브레이크 온도 등의 원격 분석을 수집한다.</li>
<li>변칙 검색 모델은 시간에 따른 원격분석 측정의 예상 변동을 이해하도록 학습된다. </li>
<li>측정값이 정상적인 예상범위를 벗어나는 경우, 모델을 변칙을 보고하여 강제로 레이싱이 중단되기 전에, 레이싱 엔지니어가 급유 정차시 운전자를 호출하여 문제를 해결하도록 한다. </li>
</ol>
<h3 id="microsoft-azure의-변칙-검색">Microsoft Azure의 변칙 검색</h3>
<p>Microsoft Azure에서 Anomaly Detector 서비스는 개발자가 변칙 검색 솔루션을 만드는 데 사용할 수 있는 API(애플리케이션 프로그래밍 인터페이스)를 제공합니다.</p>
<h2 id="컴퓨터-비전-computer-vision">컴퓨터 비전 (Computer Vision)</h2>
<p>컴퓨터 비전은 시각적 처리를 다루는 AI 분야이다.
컴퓨터 비전으로 구현되는 몇 가지 가능성을 살펴보자.</p>
<p>Seeing AI 앱은 컴퓨터 비전 기능을 잘 보여주는 예제이다. 
해당 앱은 시각 장애인을 위해 &#39;보이는&#39; 세계를 &#39;들리는&#39; 경험으로 바꿔 설명해준다. AI의 능력을 이용하여 시각적 세계를 열고 가까이에 있는 사람, 텍스트 및 사물을 설명한다. </p>
<h3 id="컴퓨터-비전-모델-및-기능">컴퓨터 비전 모델 및 기능</h3>
<p><strong>대부분</strong>의 컴퓨터 비전 솔루션은 카메라, 비디오 또는 이미지의 시각적 입력에 적용할 수 있는 <strong>기계 학습 모델을 기반으로</strong> 합니다. 
다음 표는 컴퓨터 비전의 일반적인 태스크에 대해 설명합니다.</p>
<h4 id="1-이미지-분류-image-classification">1. 이미지 분류 (image-classification)</h4>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/f949ad9b-b745-425c-8548-e9ffdcabda21/image.png" alt=""></p>
<p>이미지 분류에는 콘텐츠에 따라 이미지를 분류하는 기계 학습 모델 교육이 포함된다. 예를 들어 트래픽 모니터링 솔루션에서는 이미지 분류 모델을 사용하여 택시, 버스, 자전거 타는 사람 등 포함된 차량 유형에 따라 이미지를 분류할 수 있다.</p>
<h4 id="2-개체-감지-object-detection">2. 개체 감지 (object-detection)</h4>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/8ab4a90a-fb28-46af-be66-0e3bcd8c06d5/image.png" alt=""> </p>
<p>개체 감지 기계 학습 모델은 이미지 내의 개별 개체를 분류하고 경계 상자를 사용하여 해당 위치를 식별하도록 학습된다. 
예를 들어 트래픽 모니터링 솔루션은 개체 감지를 사용하여 다양한 차량 클래스의 위치를 식별할 수 있다.</p>
<h4 id="3-의미-체계-구분-semantic-segmentation">3. 의미 체계 구분 (semantic-segmentation)</h4>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/9628e9ae-5056-42f6-a519-655e7c4ea74c/image.png" alt=""> </p>
<p>의미 체계 구분은 <strong>이미지의 개별 픽셀이 속한 개체에 따라 분류</strong>되는 고급 기계 학습 기술이다. 
예를 들어 트래픽 모니터링 솔루션은 &quot;마스크&quot; 레이어로 트래픽 이미지를 오버레이하여 특정 색상으로 다른 차량을 강조 표시할 수 있다.</p>
<h4 id="4-이미지-분석-image-analysis">4. 이미지 분석 (image-analysis)</h4>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/37404422-b04d-4320-ae2d-b0761fcd4665/image.png" alt=""></p>
<p>이미지에 표시된 장면을 요약하는데 도움이 되는 설명 캡션 또는 이미지를 분류하는 데 도움이 되는 &#39;태그&#39;를 포함하여, 이미지에서 정보를 추출하는 고급 이미지 분석 기술과 기계 학습 모델을 결합한 솔루션을 만들 수 있다.</p>
<h4 id="5-얼굴-감지-분석-및-인식-face-analysis">5. 얼굴 감지, 분석 및 인식 (face-analysis)</h4>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/1c61468c-6040-4ad5-8e02-dc58d5aca38c/image.png" alt=""></p>
<p>얼굴 감지는 이미지에서 사람의 얼굴을 찾는 특수한 형태의 개체 감지이다. 이를 분류 및 얼굴 기하 도형 분석 기술과 결합하여 얼굴 기능에 따라 개인을 인식할 수 있다.</p>
<h4 id="6-ocr광학-문자-인식">6. OCR(광학 문자 인식)</h4>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/09dc991a-1022-4ae1-bf91-2fd144479dfb/image.png" alt=""></p>
<p>광학 문자 인식은 이미지의 텍스트를 검색하고 읽는 데 사용되는 기술입니다. OCR을 사용하여 사진(예: 도로 표지판 또는 스토어 전면)에서 텍스트를 읽거나 문자, 송장 또는 양식과 같은 스캔된 문서에서 정보를 추출할 수 있습니다.</p>
<h3 id="microsoft-azure의-컴퓨터-비전-서비스">Microsoft Azure의 컴퓨터 비전 서비스</h3>
<p>Microsoft Azure는 컴퓨터 비전 솔루션을 만드는 데 도움이 되는 다음과 같은 인지 서비스를 제공한다.</p>
<table>
<thead>
<tr>
<th>서비스</th>
<th>기능</th>
</tr>
</thead>
<tbody><tr>
<td>Computer Vision</td>
<td>이 서비스를 사용하여 이미지 및 영상을 분석하고 설명, 태그, 개체 및 텍스트를 추출할 수 있다.</td>
</tr>
<tr>
<td>Custom Vision</td>
<td>이 서비스에서 사용자 고유의 이미지를 사용하여 사용자 지정 이미지 분류 및 개체 검색 모델을 학습시킨다.</td>
</tr>
<tr>
<td>얼굴</td>
<td>Face 서비스를 사용하여 얼굴 감지 및 얼굴 인식 솔루션을 만들 수 있다.</td>
</tr>
<tr>
<td>Form Recognizer</td>
<td>이 서비스를 사용하여 스캔한 양식 및 청구서에서 정보를 추출할 수 있다.</td>
</tr>
</tbody></table>
<blockquote>
<p>사용 방법
컴퓨터 비전을 사용하여 이미지를 분석하는 방법의 예를 보려면 다음 단계를 수행합니다.
다른 브라우저 탭을 열고 <a href="https://aidemos.microsoft.com/computer-vision">https://aidemos.microsoft.com/computer-vision</a> 로이동합니다.
데모 인터페이스를 사용하여 각 단계를 시도합니다. 각 단계에 대해 이미지를 선택하고 컴퓨터 비전 서비스에서 반환하는 정보를 검토할 수 있습니다.</p>
</blockquote>
<h2 id="자연어-처리-nlp">자연어 처리 (NLP)</h2>
<p>문어와 구어를 이해하는 소프트웨어 생성을 다룬다.</p>
<p>NLP를 사용하면 다음과 같은 소프트웨어를 만들 수 있다.</p>
<ul>
<li>문서, 메일 메시지 및 기타 원본의 텍스트를 분석하고 해석한다. </li>
<li>음성 언어를 해석하고 음성 응답을 합성한다. </li>
<li>언어 간 구어 또는 문어 구를 자동으로 번역한다. </li>
<li>명령을 해석하고 적절한 작업을 결정한다. </li>
</ul>
<p>예를 들어, Starship Commander는 공상 과학 분야에서 발생하는 Human Interact의 VR(가상 현실) 게임이다. 이 게임에서는 자연어 처리를 사용하여 플레이어가 내레이션을 제어하고 게임 내 문자 및 우주선 시스템과 상호 작용할 수 있도록 한다.</p>
<h3 id="microsoft-azure의-자연어-처리">Microsoft Azure의 자연어 처리</h3>
<p>Microsoft Azure에서 다음 Cognitive Services를 사용하여 자연어 처리 솔루션을 빌드할 수 있다.</p>
<table>
<thead>
<tr>
<th>서비스</th>
<th>기능</th>
</tr>
</thead>
<tbody><tr>
<td>언어</td>
<td>이 서비스를 사용하여 텍스트를 이해 및 분석하고, 음성 또는 텍스트 기반 명령을 이해할 수 있는 언어 모델을 학습하고, 지능형 애플리케이션을 빌드하는 기능에 액세스한다.</td>
</tr>
<tr>
<td>Translator</td>
<td>이 서비스를 사용하여 텍스트를 60개 이상의 언어로 번역한다.</td>
</tr>
<tr>
<td>Speech</td>
<td>이 서비스를 사용하여 음성을 인식 및 합성하고 음성 언어를 번역한다.</td>
</tr>
<tr>
<td>Azure Bot</td>
<td>이 서비스는 대화형 AI를 위한 플랫폼인 소프트웨어 “에이전트”가 대화에 참여할 수 있는 기능을 제공한다. 개발자는 Bot Framework를 사용하여 봇을 만들고 Azure Bot Service를 사용하여 봇을 관리할 수 있다. 또한 언어와 같은 백엔드 서비스를 통합하고 웹 채팅, 메일, Microsoft Teams 등의 채널에 연결할 수 있다.</td>
</tr>
</tbody></table>
<blockquote>
<p>사용방법
자연어를 사용하여 AI 시스템과 상호 작용하는 방법의 예제를 보려면 다음 단계를 수행합니다.</p>
</blockquote>
<p>다른 브라우저 탭을 열고 <a href="https://aidemos.microsoft.com/luis/demo">https://aidemos.microsoft.com/luis/demo</a> 로이동합니다.
데모 인터페이스를 사용하여 가상 홈의 조명을 제어합니다. 명령을 입력하거나, 마이크 단추를 사용하여 명령을 말하거나, 제안된 문구를 선택하여 시스템이 응답하는 방법을 확인할 수 있습니다.</p>
<h2 id="지식마이닝">지식마이닝</h2>
<p>지식 마이닝은 종종 <strong>대량의 비정형 데이터</strong>에서 정보를 추출하여 <strong>검색 가능한 지식 저장소</strong>를 만드는 솔루션을 설명하는 데 사용되는 용어이다.</p>
<h3 id="microsoft-azure에서의-지식-마이닝">Microsoft Azure에서의 지식 마이닝</h3>
<p>이러한 지식 마이닝 솔루션 중 하나는 인덱스 작성을 위한 도구가 있는 프라이빗 엔터프라이즈 검색 솔루션인 Azure Cognitive Search입니다. 그런 다음, 인덱스는 내부 전용으로 사용하거나 공개 인터넷 자산에서 검색 가능한 콘텐츠를 활성화하는 데 사용할 수 있습니다.</p>
<p>Azure Cognitive Search가 이미지 처리, 콘텐츠 추출 및 자연어 처리와 같은 Azure Cognitive Services의 기본 제공 AI 기능을 활용하여 문서의 지식 마이닝을 수행할 수 있습니다. 제품의 AI 기능을 사용하면 이전에 검색할 수 없었던 문서를 인덱싱하고 대량의 데이터에서 신속하게 인사이트를 추출하고 노출할 수 있습니다.</p>
<hr>
<h2 id="ai-사용시-필요한-도전과제-및-위험">AI 사용시 필요한 도전과제 및 위험</h2>
<p>인공지능은 세상에 큰 도움을 주기위해 활용할 수 있는 강력한 도구이다. 그러나 다른 도구와 같이 책임감 있게 사용해야 한다.</p>
<table>
<thead>
<tr>
<th>해결 과제 또는 위험</th>
<th>예제</th>
</tr>
</thead>
<tbody><tr>
<td>바이어스는 결과에 영향을 줄 수 있습니다.</td>
<td>대출 승인 모델은 학습된 데이터의 바이어스로 인해 성별에 따라 차별합니다.</td>
</tr>
<tr>
<td>오류로 인해 해로울 수 있습니다.</td>
<td>자율 주행 차량에서 시스템 오류가 발생하여 충돌이 발생합니다.</td>
</tr>
<tr>
<td>데이터가 노출될 수 있습니다.</td>
<td>의료 진단 봇이 중요한 환자 데이터로 학습되지만 이러한 데이터가 안전하지 않게 저장되어 있습니다.</td>
</tr>
<tr>
<td>해결 방법이 모든 사용자에게 작동하지 않을 수 있습니다.</td>
<td>홈 오토메이션 도우미는 시각 장애가 있는 사용자를 위한 오디오 출력을 제공하지 않습니다.</td>
</tr>
<tr>
<td>사용자는 복잡한 시스템을 신뢰해야 합니다.</td>
<td>AI 기반 재무 도구는 투자 권장 지침을 제공합니다. 이러한 권장 사항은 무엇을 기준으로 할까요?</td>
</tr>
<tr>
<td>AI 기반 결정은 누구의 책임인가요?</td>
<td>안면 인식 증거에 따라 죄없는 사람이 범죄자로 확인되었습니다. 누구의 책임인가요?</td>
</tr>
</tbody></table>
<h2 id="담당-ai-이해">담당 AI 이해</h2>
<p>Microsoft에서 AI 소프트웨어 개발은 6가지 원칙에 의해 안내된다.</p>
<h3 id="공정성">공정성</h3>
<p><strong>AI 시스템은 모든 사람을 공평하게 대해야 합니다.</strong> 예를 들어 은행의 대출 승인 애플리케이션을 지원하는 기계 학습 모델을 만든다고 가정합니다. 모델은 대출이 바이어스 없이 승인되거나 거부되어야 하는지를 예측해야 합니다. 이러한 바이어스는 성별, 민족 또는 특정 신청자 그룹에게 불공정한 이익 또는 불이익을 주는 기타 요인을 기반으로 할 수 있습니다.</p>
<p>Azure Machine Learning에는 모델을 해석하고 데이터의 각 기능이 모델의 예측에 영향을 미치는 정도를 정량화하는 기능이 포함됩니다. 이 기능을 통해 데이터 과학자와 개발자는 모델의 바이어스를 식별하고 완화할 수 있습니다.</p>
<p>또 다른 예로 Microsoft가 Face 서비스를 통해 책임 있는 AI를 구현한 경우 감정 상태 및 ID 특성을 유추하는 데 사용할 수 있는 얼굴 인식 기능을 사용 중지합니다. 이러한 기능은 오용될 경우 사람들이 고정 관념, 차별 또는 불공정한 서비스 거부를 겪을 수 있습니다.</p>
<h3 id="신뢰성-및-안전성">신뢰성 및 안전성</h3>
<p>AI 시스템은 안정적이고 안전한 방식으로 작동해야 합니다. 예를 들어 자율 주행 차량에 대한 AI 기반 소프트웨어 시스템 또는 환자 증상을 진단하고 처방전을 권장하는 기계 학습 모델을 생각해 보세요. 이러한 종류의 시스템을 믿을 수 없다면 인간의 삶에 상당한 위험을 초래할 수 있습니다.</p>
<p>AI 기반 소프트웨어 애플리케이션을 개발할 때는 출시 전에 예상대로 작동하는지 확인하기 위해 엄격한 테스트 및 배포 관리 프로세스를 실시해야 합니다.</p>
<h3 id="개인정보-보호-및-보안">개인정보 보호 및 보안</h3>
<p>AI 시스템은 안전하고 개인 정보를 보호해야 합니다. 기계 학습 모델을 기준으로 하는 AI 시스템은 대량의 데이터에 의존하며, 여기에는 비공개로 유지해야 하는 개인 정보가 포함될 수 있습니다. 모델이 학습되고 시스템이 프로덕션 환경에 있는 경우에도 개인 정보 보호 및 보안을 고려해야 합니다. 시스템에서 새 데이터를 사용하여 예측하거나 조치를 취할 때 데이터와 데이터에서 내린 결정 모두 개인 정보 보호 또는 보안 문제의 대상이 될 수 있습니다.</p>
<h3 id="포용성">포용성</h3>
<p>AI 시스템은 모든 사람에게 힘을 주고 사람들과 관계를 맺어야 합니다. AI는 신체적 능력, 성별, 성적 지향, 인종 또는 기타 요인에 관계없이 사회의 모든 부분에 혜택을 가져다 주어야 합니다.</p>
<h3 id="투명성">투명성</h3>
<p>AI 시스템은 이해하기 쉬워야 합니다. 사용자는 시스템의 목적, 작동 방식 및 예상되는 제한 사항에 대해 충분히 인식해야 합니다.</p>
<h3 id="책임성">책임성</h3>
<p>사람들은 AI 시스템에 대한 책임을 져야 합니다. AI 기반 솔루션의 설계자와 개발자는 솔루션이 명확하게 정의된 윤리적 및 법적 표준 충족을 보장하는 거버넌스 및 조직 원칙의 프레임워크 내에서 작동해야 합니다.&#39;</p>
<blockquote>
<p>담당 AI의 원칙은 개발자가 윤리적 AI 솔루션을 만들려고 할 때 직면하는 난제를 이해하는 데 도움이 될 수 있습니다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[안드로이드 스튜디오 깃허브와 연동하기]]></title>
            <link>https://velog.io/@sumin_lee_317/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4-%EA%B9%83%ED%97%88%EB%B8%8C%EC%99%80-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@sumin_lee_317/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4-%EA%B9%83%ED%97%88%EB%B8%8C%EC%99%80-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0</guid>
            <pubDate>Mon, 14 Nov 2022 18:15:26 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>깃허브에 프로젝트 폴더는 생성되어 있고, 
그 폴더에 있는 파일만 싹 다 밀고 다시 올리는 상황</p>
</blockquote>
<h4 id="🏷️-참고한-링크">🏷️ 참고한 링크</h4>
<p><a href="https://stackoverflow.com/questions/5377960/git-whats-the-best-practice-to-git-clone-into-an-existing-folder">https://stackoverflow.com/questions/5377960/git-whats-the-best-practice-to-git-clone-into-an-existing-folder</a></p>
<h4 id="1">1.</h4>
<pre><code>git init</code></pre><h4 id="2">2.</h4>
<pre><code>git remote add origin 연결할_깃허브_프로젝트_경로(링크)</code></pre><h4 id="3">3.</h4>
<pre><code>git fetch origin</code></pre><h4 id="4">4.</h4>
<pre><code>git checkout -b main --track origin/main</code></pre><h4 id="5">5.</h4>
<pre><code>git reset origin/main</code></pre><h4 id="6-git-commit--force-push">6. git commit &amp; (force) push</h4>
<hr>
<h4 id="🔎-실제로-사용한-코드-내역">🔎 실제로 사용한 코드 내역</h4>
<pre><code>E:\Home\Android_project\AiDoor&gt;git init
Initialized empty Git repository in E:/Home/Android_project/AiDoor/.git/

E:\Home\Android_project\AiDoor&gt;git remote add origin https://github.com/lifeofsue/AIDoorLockPro
ject

E:\Home\Android_project\AiDoor&gt;git fetch origin
remote: Enumerating objects: 141, done.
remote: Counting objects: 100% (65/65), done.
remote: Compressing objects: 100% (48/48), done.
remote: Total 141 (delta 21), reused 38 (delta 12), pack-reused 76 eceiving objects:  74% (105/
Receiving objects:  75% (106/141)
Receiving objects: 100% (141/141), 283.99 KiB | 788.00 KiB/s, done.
Resolving deltas: 100% (22/22), done.
From https://github.com/lifeofsue/AIDoorLockProject
 * [new branch]      feat/ui    -&gt; origin/feat/ui
 * [new branch]      main       -&gt; origin/main

E:\Home\Android_project\AiDoor&gt;
E:\Home\Android_project\AiDoor&gt;git checkout -b main --track origin/main
Switched to a new branch &#39;main&#39;
Branch &#39;main&#39; set up to track remote branch &#39;main&#39; from &#39;origin&#39;.

E:\Home\Android_project\AiDoor&gt;git reset origin/main
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[라즈베리파이에 OpenCV 4.5 설치]]></title>
            <link>https://velog.io/@sumin_lee_317/%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4%EC%97%90-OpenCV-4.5-%EC%84%A4%EC%B9%98</link>
            <guid>https://velog.io/@sumin_lee_317/%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4%EC%97%90-OpenCV-4.5-%EC%84%A4%EC%B9%98</guid>
            <pubDate>Thu, 03 Nov 2022 14:35:02 GMT</pubDate>
            <description><![CDATA[<p>OpenCV(Open Source Computer Vision)는 실시간 컴퓨터 비전을 목적으로 한 프로그래밍 라이브러리로 리눅스, 윈도 등 다양한 플랫폼을 지원하고 있다. 프로그래밍 언어도 C, C++ 뿐만 아니라 파이썬도 지원하고 있어 본 교재에서는 파이썬을 사용한 OpenCV 활용도 가능하다. </p>
<h2 id="라즈베리파이-opencv-45-설치">라즈베리파이 OpenCV 4.5 설치</h2>
<p>이미 빌드된 OpenCV 버전은 2.x이다. 
안면 인식, 손글씨 인식 등의 인공지능 기능을 사용하려면 최신 버전인 4.x 이상이 필요하다. 소스코드를 받아서 빌드과정을 거치는 방법은 다음과 같다. </p>
<h4 id="설치-전-시스템-업그레이드-하기">설치 전 시스템 업그레이드 하기</h4>
<pre><code class="language-bash">$ sudo apt update
$ sudo apt upgrade</code></pre>
<h4 id="opencv-빌드를-위한-패키지-설치">OpenCV 빌드를 위한 패키지 설치</h4>
<pre><code class="language-bash">$ sudo apt install cmake build-essential pkg-config git

$ sudo apt install libjpeg-dev libtiff-dev libjasper-dev libpng-dev libwebp-dev libopenexr-dev</code></pre>
<h3 id="이미지-및-비디오-포맷-패키지-설치">이미지 및 비디오 포맷 패키지 설치</h3>
<pre><code class="language-bash">$ sudo apt install libavcodec-dev libformat-dev libswscale-dev lib4l-dev libxvidcore-dev libx264-dev libdc1394-22-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev</code></pre>
<h4 id="opencv-인터페이스-패키지-설치">OpenCV 인터페이스 패키지 설치</h4>
<pre><code class="language-bash">$ sudo apt install libgtk-3-dev libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5</code></pre>
<h4 id="임베디드-디바이스-패키지-설치">임베디드 디바이스 패키지 설치</h4>
<pre><code class="language-bash">$ sudo apt install libatlas-base-dev liblapacke-dev gfortran</code></pre>
<h4 id="hierarchical-data-format-hdf5-데이터-포맷-지원">Hierarchical Data Format (HDF5) 데이터 포맷 지원</h4>
<pre><code class="language-bash">$ sudo apt install libhdf5-dev libhdf5-103</code></pre>
<h4 id="파이썬-3-패키지-설치">파이썬 3 패키지 설치</h4>
<pre><code>$ sudo apt install python3-dev python3-pip python3-numpy</code></pre><h3 id="스왑-파일-수정-및-재설정">스왑 파일 수정 및 재설정</h3>
<p>OpenCV 소스코드 컴파일을 위해서 스왑 파일(가상 메모리 파일)을 2048로 용량 변경</p>
<pre><code class="language-bash">$ sudo vi /etc/dphys-swapfile</code></pre>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/c03a69f1-2b71-40ef-bcb6-912bcb360fb0/image.png" alt=""></p>
<pre><code class="language-bash">$ sudo systemctl restart dphys-swapfile</code></pre>
<h3 id="opencv-소스코드-다운로드">OpenCV 소스코드 다운로드</h3>
<pre><code class="language-bash">$ git clone https://github.com/opencv/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git</code></pre>
<h3 id="opencv-빌드를-위한-디렉터리-생성">OpenCV 빌드를 위한 디렉터리 생성</h3>
<pre><code class="language-bash">$ mkdir ~/opencv/build
$ cd ~/opencv/build</code></pre>
<h3 id="opencv-빌드-환경설정">OpenCV 빌드 환경설정</h3>
<pre><code class="language-bash">$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D BUILD_TESTS=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D CMAKE_SHARED_LINKER_FLAGS=-latomic \
-D BUILD_EXAMPLES=OFF ..</code></pre>
<h3 id="opencv-빌드">OpenCV 빌드</h3>
<pre><code class="language-bash">$ make -j$(nproc)
$ sudo make install 
$ sudo ldconfig</code></pre>
<p>빌드가 완료되는 데까지 최대 1시간 30분 걸립니다. </p>
<h3 id="스왑-파일-복구">스왑 파일 복구</h3>
<p>etc/dphys-swapfile 파일에서 다시 스왑 파일을 원래대로 복구합니다.</p>
<p>CONF_SWAPSIZE=100</p>
<pre><code class="language-bash">$ sudo systemctl restart dphys-swapfile</code></pre>
<h3 id="opencv-버전-확인">OpenCV 버전 확인</h3>
<pre><code class="language-bash">$ python3
import cv2
cv2._ version</code></pre>
<h3 id="opencv-빌드-1">OpenCV 빌드</h3>
<pre><code class="language-bash"></code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[05  Conversational AI]]></title>
            <link>https://velog.io/@sumin_lee_317/05-Conversational-AI</link>
            <guid>https://velog.io/@sumin_lee_317/05-Conversational-AI</guid>
            <pubDate>Wed, 26 Oct 2022 17:11:18 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이번 강의에서는 Conversational AI (대화형 AI)에 대해 설명합니다.</p>
</blockquote>
<h2 id="🚀-conversational-ai-개념">🚀 Conversational AI 개념</h2>
<h3 id="🌌-conversational-ai란-무엇인가">🌌 Conversational AI란 무엇인가? <img src="https://velog.velcdn.com/images/sumin_lee_317/post/6031e067-40cc-4ed0-86d1-6ef1bb6eb1e6/image.png" alt=""></h3>
<p>AI 에이전트와 인간 간에 대화를 가능하게 하는 솔루션입니다. 일반적으로 AI 에이전트는 봇으로 알려져 있습니다.
봇은 여러 채널을 통해 참여할 수 있습니다.</p>
<ul>
<li>웹 채팅 인터페이스</li>
<li>이메일</li>
<li>소셜 미디어 플랫폼</li>
<li>음성</li>
</ul>
<h3 id="🌌-bot에-대한-책임형-ai-지침">🌌 Bot에 대한 책임형 AI 지침</h3>
<h4 id="be-transparent-about-what-the-bot-can-and-cant-do">Be transparent about what the bot can (and can&#39;t) do.</h4>
<p>봇이 할 수 있는 일과 할 수 없는 일을 확실히 해야 합니다. </p>
<h4 id="make-it-clear-that-user-is-communicating-with-a-bot">Make it clear that user is communicating with a bot</h4>
<p>사용자가 봇과 확실히 통신해야 합니다.</p>
<h4 id="enable-the-bot-to-seamlessly-hand-off-to-a-human-if-necessary">Enable the bot to seamlessly hand-off to a human if necessary</h4>
<p>필요한 경우 봇에서 인간으로의 전달이 원활하도록 해야 합니다.</p>
<h4 id="ensure-the-bot-respects-cultural-norms">Ensure the bot respects cultural norms</h4>
<p>봇이 문화적 규범을 존중하도록 해야 합니다.</p>
<h4 id="ensure-the-bot-is-reliable">Ensure the bot is reliable</h4>
<p>봇을 신뢰할 수 있어야 합니다.</p>
<h4 id="respect-user-privacy">Respect user privacy</h4>
<p>사용자 개인 정보 보호를 존중합니다.</p>
<h4 id="handle-data-securely">Handle data securely</h4>
<p>데이터 보안 처리를 관리합니다.</p>
<h4 id="ensure-the-bot-meets-accessibility-standards">Ensure the bot meets accessibility standards</h4>
<p>봇이 접근성 표준을 충족하도록 해야 합니다.</p>
<h4 id="assume-accountability-for-the-bots-actions">Assume accountability for the bot&#39;s actions</h4>
<p>봇의 행동에 대한 책임을 집니다.</p>
<h3 id="🌌-bot-demo">🌌 Bot Demo</h3>
<p><a href="https://www.microsoft.com/en-us/research/project/health-bot/">https://www.microsoft.com/en-us/research/project/health-bot/</a> 를 통해 Azure Health Bot을 사용해볼 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/26a5eb4c-23a3-4fc2-8872-a8851a60931b/image.png" alt="">
Azure 에서 만들어 놓은 Health-Bot과의 대화를 통해 자신의 질병과 증상에 대해 설명을 들을 수 있습니다.</p>
<h2 id="🚀-conversational-ai-in-azure">🚀 Conversational AI In Azure</h2>
<h3 id="🌌-qna-maker-service">🌌 QnA Maker Service <img src="https://velog.velcdn.com/images/sumin_lee_317/post/bf655810-2a14-4f3c-b601-e71068d1843f/image.png" alt=""></h3>
<p>질문 및 답변 쌍의 기술 자료를 정의하여 사용합니다.
질문과 답변을 입력하여 사용합니다.
기존 FAQ 문서에서 가져와 사용합니다.
내장된 chit-chat를 사용합니다.</p>
<h3 id="🌌-azure-bot-service">🌌 Azure Bot Service <img src="https://velog.velcdn.com/images/sumin_lee_317/post/d0a0025a-61be-4dd4-b506-58e5c0699a3b/image.png" alt=""></h3>
<p>봇 개발 및 관리를 위한 클라우드 기반 플랫폼 서비스 입니다.
다른 서비스 및 및 여러 채널과 연결하여 유연하게 사용합니다. (LUIS, QnA Maker 및 기타)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[04 Natural Language Processing]]></title>
            <link>https://velog.io/@sumin_lee_317/04-Natural-Language-Processing</link>
            <guid>https://velog.io/@sumin_lee_317/04-Natural-Language-Processing</guid>
            <pubDate>Wed, 26 Oct 2022 17:07:55 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이번 강의에서는 Natural Language Processing(자연어 처리)에 대해 설명합니다.</p>
</blockquote>
<h2 id="🚀-natural-language-processing">🚀 Natural Language Processing</h2>
<h3 id="🌌-text-analysis-and-entity-recognition-텍스트-분석-및-엔티티-인식">🌌 Text analysis and entity recognition (텍스트 분석 및 엔티티 인식) <img src="https://velog.velcdn.com/images/sumin_lee_317/post/da8001da-604a-4fc7-89b4-e154288e134f/image.png" alt=""></h3>
<ul>
<li>텍스트를 분석하고 말하는 언어 중에 명사를 따로 뽑아내고 인식하는 기술입니다.</li>
</ul>
<blockquote>
<p><a href="https://aidemos.microsoft.com/text-analytics">https://aidemos.microsoft.com/text-analytics</a> 에서 데모를 실행할 수 있습니다.</p>
</blockquote>
<ol>
<li><p>분석할 문장을 입력합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/e4fbaf89-f4a8-4caf-bc91-38a1c3cc1459/image.png" alt=""></p>
</li>
<li><p>감정 분석 및 핵심 문구를 추출합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/0c1d48a0-1b43-4002-be9d-b82c840d7119/image.png" alt=""></p>
</li>
<li><p>핵심 문구에 대한 이미지의 링크와 연결되어 사용자에게 보여집니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/0d21b686-defa-490c-a4f8-5725e9daeadc/image.png" alt=""></p>
</li>
</ol>
<h3 id="🌌-sentiment-analysis-감정-분석">🌌 Sentiment analysis (감정 분석) <img src="https://velog.velcdn.com/images/sumin_lee_317/post/6d64a9ab-014f-45aa-94a3-8c829dd9f6f0/image.png" alt=""></h3>
<p>텍스트에 있는 내용을 분석하여 텍스트의 전반적인 내용이 긍정적인지 부정적인지 분석합니다.</p>
<p>트위터, 페이스북의 댓글들을 통해 긍정, 부정 댓글을 확인할 수 있고, 
배달 후기에 내용을 통해 긍정, 부정 후기를 분류합니다.</p>
<h3 id="🌌-speech-recognition-and-synthesis-음성-인식-및-합성">🌌 Speech recognition and synthesis (음성 인식 및 합성) <img src="https://velog.velcdn.com/images/sumin_lee_317/post/cc29d823-88fd-4d4f-a580-f87dbece4ad9/image.png" alt=""></h3>
<ul>
<li>AI가 음성을 인식하여 텍스트로 바꿔주거나 텍스트를 음성으로 변환하여 제공합니다. </li>
<li>또한 음성 인식을 통하여 사용자가 원하는 기능을 수행합니다.</li>
</ul>
<h3 id="🌌-machine-translation-기계-번역">🌌 Machine translation (기계 번역) <img src="https://velog.velcdn.com/images/sumin_lee_317/post/86b463aa-8aaf-44fb-8999-2526d72c4070/image.png" alt=""></h3>
<p>사용자가 텍스트를 통해 사용자가 원하는 언어로 변환하여 제공을 받습니다.</p>
<p>실시간으로 언어를 번역하여 제공 또한 가능합니다.</p>
<h3 id="🌌-semantic-language-modeling-의미-체계적-언어-모델링">🌌 Semantic language modeling (의미 체계적 언어 모델링) <img src="https://velog.velcdn.com/images/sumin_lee_317/post/b06204dc-aec3-4660-b0a9-c5c645216030/image.png" alt=""></h3>
<h2 id="🚀-natural-language-processing-in-azure">🚀 Natural Language Processing In Azure</h2>
<h4 id="🪐-text-analytics">🪐 Text Analytics</h4>
<ul>
<li>텍스트에 대한 언어, 감정, 핵심 문구, 엔티티를 추출합니다.</li>
</ul>
<h4 id="🪐-speech-recognition-and-synthesis">🪐 Speech Recognition and Synthesis</h4>
<ul>
<li>서비스의 음성을 텍스트로 변환 기능을 사용하여 음성을 텍스트로 전사합니다. 
변환한 텍스트를 AI가 음성으로 재전달합니다.</li>
</ul>
<h4 id="🪐-translate">🪐 Translate</h4>
<ul>
<li>텍스트를 사용자가 원하는 언어로 번역하여 제공받습니다.</li>
</ul>
<h4 id="🪐-language-understanding">🪐 Language Understanding</h4>
<ul>
<li>Utterance(발언) 내의 엔티티를 통해 언어를 이해합니다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[03 Computer Vision]]></title>
            <link>https://velog.io/@sumin_lee_317/03-Computer-Vision</link>
            <guid>https://velog.io/@sumin_lee_317/03-Computer-Vision</guid>
            <pubDate>Wed, 26 Oct 2022 17:01:19 GMT</pubDate>
            <description><![CDATA[<p><a href="%5D(https://edu.gitgo.co.kr/courses/course-v1:Squarenet+SQN902x+2021_Y1/courseware/0268c72accf4456c9699243ff8172323/ce32a26f428c4852bc01ba60246f0dee/?child=first"></a></p>
<blockquote>
<p>이번 강의에서는 Computer Vision에 대해 설명합니다.</p>
</blockquote>
<h2 id="🚀-computer-vision의-개념">🚀 Computer Vision의 개념</h2>
<h3 id="🌌-computer-vision이란">🌌 Computer Vision이란? <img src="https://velog.velcdn.com/images/sumin_lee_317/post/3c150f55-8c41-4598-8ca8-127814a14867/image.png" alt=""></h3>
<p>이미지,CCTV, 동영상 파일을 통해 학습을 하게 됩니다.</p>
<p>학습 할 데이터에 모눈 종이처럼 픽셀 값을 세팅을 합니다.</p>
<p>픽셀에 RGB(빨강,초록,파랑)를 입히고 색을 조합하여 이미지를 추출하게 됩니다.</p>
<h3 id="🌌-application-of-computer-vision">🌌 Application of Computer Vision</h3>
<h4 id="🪐-image-classification">🪐 Image Classification</h4>
<ul>
<li>이미지를 업로드하고 레이블 값을 알려주면 컴퓨터가 이미지의 특성을 분석하고 인지하게 됩니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/614091df-f66a-4ec8-8dd1-381d96c48c42/image.png" alt=""></li>
</ul>
<h4 id="🪐-object-detection">🪐 Object Detection</h4>
<ul>
<li>사각형 박스를 통해 물체를 탐지합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/04ab0130-ef07-489b-97ff-6600542e50be/image.png" alt=""></li>
</ul>
<h4 id="🪐-semantic-segmentation">🪐 Semantic Segmentation</h4>
<ul>
<li>물체 자체에 대한 인식을 제공합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/4cadbae3-dd84-4817-af0e-5f10eefbb84b/image.png" alt=""></li>
</ul>
<h4 id="🪐-image-analysis">🪐 Image Analysis</h4>
<ul>
<li>이미지를 분석하여 텍스트를 통해  이미지에 대한 안내를 제공합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/50f8d2c4-7d6d-468a-8517-3f72e13d1534/image.png" alt=""></li>
</ul>
<h4 id="🪐-face-detection--recognition">🪐 Face Detection &amp; Recognition</h4>
<ul>
<li>사람의 얼굴 데이터만 추출합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/debbed78-a1c4-4ba3-96c8-3840af18b972/image.png" alt=""></li>
</ul>
<h4 id="🪐-optical-character-recognition">🪐 Optical Character Recognition</h4>
<ul>
<li>길거리 표지판, 영수증, 손 글씨 등 문자를 인식합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/713c0709-39aa-4d7b-b4c3-aa4477438cf6/image.png" alt=""></li>
</ul>
<h2 id="🚀-computer-vision-in-azure">🚀 Computer Vision In Azure</h2>
<h3 id="🌌-computer-vision이란-1">🌌 Computer Vision이란?</h3>
<p>Azure 구독 내의 AI 애플리케이션 리소스를 통하여 사용합니다. </p>
<p>리소스 종류로,</p>
<ul>
<li>특정 서비스용 독립 실행형 리소스</li>
<li>여러 서비스용 일반 Cognitive Services 리소스
가 있습니다.</li>
</ul>
<p>Computer Vision은 REST 엔드포인트에 (https://주소)를 붙혀 인증 키 값을 달고 사용하게 됩니다.</p>
<p>Computer Vision 서비스는 다음과 같은 서비스를 제공합니다.</p>
<ul>
<li>사전에 학습된 Computer Vision 모델</li>
<li>미리 정의된 10,000개 이상의 클래스에 대한 개체 감지</li>
<li>이미지 설명 및 태그 생성</li>
<li>얼굴 감지 및 분석<ul>
<li>얼굴 특성: 연령, 감정</li>
<li>얼굴 인식: 유사성 일치, 본인 여부 확인</li>
</ul>
</li>
<li>콘텐츠 조정 (나이, 폭력, 성적인 기능 조정 가능)</li>
<li>텍스트 감지 및 OCR<ul>
<li>텍스트 위치 검색: 인쇄, 수기</li>
<li>Form Recognizer Serivce - 이미지 또는 PDF 형식으로 스캔된 양식에서 정보 추출, 사용자 고유 양식 또는 사전 학습된 모델을 사용, 텍스트 추출 뿐만 아니라 양식 필드의 의미 인식을 수행합니다.</li>
</ul>
</li>
</ul>
<h3 id="🌌-custom-vision이란">🌌 Custom Vision이란? <img src="https://velog.velcdn.com/images/sumin_lee_317/post/bd9269b6-4dc1-4420-bd24-ec3fb3a1a6e0/image.png" alt=""></h3>
<p>사용자의 데이터를 통해 사용자 맞춤 데이터 학습을 통한 모델을 만들어 Computer Vision을 사용할 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[02 Machine Learning]]></title>
            <link>https://velog.io/@sumin_lee_317/02-Machine-Learning</link>
            <guid>https://velog.io/@sumin_lee_317/02-Machine-Learning</guid>
            <pubDate>Wed, 26 Oct 2022 16:54:15 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이번 강의에서는 Machine Learning과 Machine Learning 방법 및 Azure Machine Learning 에 대해 설명합니다.</p>
</blockquote>
<h2 id="🚀-machine-learning이란">🚀 Machine Learning이란?</h2>
<p>과거의 데이터에서 관련성을 찾아 예측 하는 모델을 만드는 것
인공지능을 사용하기 전 과거 통계에서는 과거의 데이터를 모두 사용했지만 머신 러닝에서는 과거의 데이터를 두개로 쪼갭니다. (Split data)</p>
<ul>
<li>Training Data: 학습 데이터를 통해 모델을 만듭니다.</li>
<li>Validation Data: 나머지 데이터를 모델에 넣어서 예측이 잘 되는지 검증합니다.
데이터는 보통 7:3 또는 5:5로 랜덤하게 행으로 분할합니다.</li>
</ul>
<h3 id="🌌-regression-회귀-분석">🌌 Regression (회귀 분석)</h3>
<p>회기 분석은 함수 식에 값을 넣어서 미래를 예측하는 분석 방법입니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/d9f94ea6-4399-40ab-b8d0-d4b68db228f4/image.png" alt=""></p>
<p>왼쪽 이미지의 온도 별 자전거 렌탈 댓수 데이터 값을 통하여 오른쪽 이미지의 그래프를 그릴 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/fffc346d-c700-4436-8a81-e3381235fc4f/image.png" alt=""></p>
<p>데이터들의 연장선을 통하여 기울기를 확인할 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/dbb9abd7-0598-4d5b-b6e4-fabd8e8621b1/image.png" alt=""></p>
<p>그래프의 기울기를 통해 y절편을 구하고 함수식으로 표현할 수 있습니다. 즉, 모델은 함수식입니다.
함수식에 x값인 온도를 넣으면 그래프에서 편차가 발생하게 됩니다.
이러한 편차를 줄이고 정확한 예측 모델을 찾는 것이 머신러닝의 핵심입니다.</p>
<h3 id="🌌-classification-분류">🌌 Classification (분류) <img src="https://velog.velcdn.com/images/sumin_lee_317/post/2e2657bd-bbac-48bf-be7a-d262c4d54f5b/image.png" alt=""></h3>
<p>왼쪽 이미지의 당뇨병 환자 데이터를 통해 오른쪽 이미지의 그래프를 그릴 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/ca52b2d0-3d92-4757-9892-0ffc885f1f9b/image.png" alt=""></p>
<p>그래프로 만든 함수를 통해 Validation 값을 사용하여 예측을 진행합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/5c86f9ab-e9fe-4217-83cc-117d9c9ba016/image.png" alt=""></p>
<p>True는 실제 값과 예측 값이 같을 경우를 말하고, False는 실제 값과 예측 값이 다를 경우를 말합니다.
Positive는 1일 경우 표시하고, Negative는 0일 경우 표시합니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/15105e76-b38a-41b5-b163-d0a9783b3dda/image.png" alt=""></p>
<p>결론: 실제 값과 예측 값이 같고, 1이라고 예측할 경우, True Positive (TP)
     실제 값과 예측 값이 같고, 0이라고 예측할 경우, True Negative (TN)
     실제 값과 예측 값이 다르고, 1이라고 예측할 경우, False Positive (FP)
     실제 값과 예측 값이 다르고, 0이라고 예측할 경우, False Negative (FN)</p>
<h3 id="🌌-clustering-군집분석">🌌 Clustering (군집분석) <img src="https://velog.velcdn.com/images/sumin_lee_317/post/e3760e1c-8795-4d39-b821-c6f69e4b1d75/image.png" alt=""></h3>
<p>왼쪽의 꽃 별 꽃의 키와 꽃잎 갯수 데이터로 오른쪽 그래프 위에 표현할 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/6e58e83a-c8fe-49aa-9ed9-e300437ae2f8/image.png" alt=""></p>
<p>임의의 꽃과 꽃 사이의 중심이 되는 곳에 점을 찍습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/f547809d-830c-4b2a-8171-b132ce1050dd/image.png" alt=""></p>
<p>꽃과 가까운 점으로 묶습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/715267d4-2ef7-4d02-9371-a2b775b8e3c6/image.png" alt=""></p>
<p>그룹의 중심점을 다시 찾습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/9763e72b-6156-496f-87cb-3c780e7c8dc0/image.png" alt=""></p>
<p>꽃과 꽃 사이의 거리를 계산하고 점(평균)들로부터 가까운 꽃들끼리 묶습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/aa6c5234-da88-4143-96aa-a5ae53293666/image.png" alt=""></p>
<p>반복적으로 묶고 평균을 내면 데이터 안의 비슷한 패턴과 구조를 발견합니다.
K-Means (K 평균 클러스터링)</p>
<p>K: 군집의 갯수, Means 군집의 중심과 데이터의 평균 값</p>
<h2 id="🚀-azure-machine-learning">🚀 Azure Machine Learning</h2>
<h3 id="🌌-azure-machine-learning">🌌 Azure Machine Learning</h3>
<ul>
<li><p>Azure Cloud 기반 머신러닝 플랫폼입니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/083a2e12-76b3-4367-8f0f-9632c602a8e2/image.png" alt=""></p>
</li>
<li><p>Azure 구독 내에 ML Workspace가 들어있고, Workspace 내에 컴퓨팅, 실험, 데이터, 모델링, 서비스 등이 들어있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/55e92d28-5cc0-44f6-a4a3-bef41c300ed6/image.png" alt=""></p>
</li>
<li><p>Azure Machine Learning designer를 통해 머신러닝 파이프라인을 생성할 수 있습니다.</p>
</li>
</ul>
<h3 id="🌌-automated-machine-learning">🌌 Automated Machine Learning</h3>
<ul>
<li>데이터를 넣고 어떤 알고리즘, 어떤 모델을 선택할지 사용자가 선택했지만, 데이터를 로드, 임계값을 정해주면 인공지능이 알고리즘을 테스트하여  가장 적합한 모델을 찾아줍니다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[01 Introduction to AI]]></title>
            <link>https://velog.io/@sumin_lee_317/01-Introduction-to-AI</link>
            <guid>https://velog.io/@sumin_lee_317/01-Introduction-to-AI</guid>
            <pubDate>Wed, 26 Oct 2022 16:46:16 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이번 강의에서는 Azure 내 AI 기능과 여러 AI 사용 예시와 이에 대한 AI의 책임에 대해 설명합니다.</p>
</blockquote>
<p>🚀🌌🌠🪐</p>
<h2 id="🚀-1-azure-내-기능">🚀 1. Azure 내 기능</h2>
<h3 id="🌌-ai란-무엇인가">🌌 AI란 무엇인가?</h3>
<h4 id="software-that-imitates-human-capabilities인간의-능력을-모방">Software that imitates human capabilities(인간의 능력을 모방)</h4>
<ul>
<li>과거의 데이터와 경험을 기반으로 의사 결정을 할 수 있습니다.</li>
<li>ex) 구름이 잔뜩 낀 날에는 비가 올 확률이 높다고 인지할 수 있습니다.</li>
</ul>
<h4 id="recognizing-abnormal-events-비정상적인-이벤트-인식">Recognizing abnormal events (비정상적인 이벤트 인식)</h4>
<ul>
<li>정상적인 이벤트가 진행되지 않고 있음을 인식할 수 있습니다.</li>
<li>ex) 가방 끈 한쪽이 끊어져서 멜 수가 없는 상황을 인식할 수 있습니다.</li>
</ul>
<h4 id="interpreting-visual-input-시각적-입력-해석">Interpreting visual input (시각적 입력 해석)</h4>
<ul>
<li>시각적으로 입력을 인지하고 파악할 수 있습니다.</li>
<li>ex) 이미지에서 과일의 종류를 분류하여 인식할 수 있습니다.</li>
</ul>
<h4 id="under-standing-written-and-spoken-language-서면-및-음성-언어-이해">Under standing written and spoken language (서면 및 음성 언어 이해)</h4>
<ul>
<li>사람의 음성과 언어를 이해하고 분석할 수 있습니다.</li>
<li>ex) papago , 구글 번역기에서 언어를 다른 나라의 언어로 번역할 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/fa758765-26e6-42fd-ac46-c210df77ad97/image.png" alt=""></li>
</ul>
<h4 id="engaging--in-dialogues-and-conversations-대화에-참여">Engaging  in dialogues and conversations (대화에 참여)</h4>
<ul>
<li>AI가 사람과 대화에 참여하여 실시간 또는 주어진 질문에 대한 대답이 가능합니다.</li>
<li>ex) 인터파크-톡집사를 통하여 AI와 의사소통할 수 있습니다. <img src="https://velog.velcdn.com/images/sumin_lee_317/post/e4aa11d7-8488-44c9-8091-c4a9ebf751be/image.png" alt=""></li>
</ul>
<h3 id="🌌-ai-워크로드">🌌 AI 워크로드</h3>
<h4 id="🪐-machine-learning--머신-러닝">🪐 Machine Learning  (머신 러닝)</h4>
<ul>
<li>데이터 및 통계를 기반으로 모델이나 함수를 만들고 모델에 기반하여 미래의 데이터가 들어왔을 때 예측하는 방법</li>
<li>ex) 정상적인 차량을 학습하고 찌그러진 부분과 얼마나 차이가 있는지 분석합니다.</li>
</ul>
<h4 id="🪐-anomaly-detection-이상-탐지">🪐 Anomaly Detection (이상 탐지)</h4>
<ul>
<li>정상적인 상황이 아닐 경우 잘못된 상황임을 인지함. 비정상적인 패턴이나 이벤트를 감지하여 정상적으로 돌려놓는 방법</li>
<li>ex) 차량의 파손 상태 인지를 인지합니다.</li>
</ul>
<h4 id="🪐-computer-vision컴퓨터-비전">🪐 Computer Vision(컴퓨터 비전)</h4>
<ul>
<li>카메라, 이미지, 비디오의 시각적 입력을 해석하는 방법</li>
<li>ex) 자동차 번호판을 인지하고 판독합니다.</li>
</ul>
<h4 id="🪐-natural-language-processing-자연어-처리">🪐 Natural Language Processing (자연어 처리)</h4>
<ul>
<li>서면 또는 음성 언어를 해석할 수 있는 애플리케이션</li>
<li>ex) 차량의 파손 현황을 고객이 음성으로 녹음하면 AI가 음성 언어를 분석합니다.</li>
</ul>
<h4 id="🪐-conversation-ai-대화형-ai">🪐 Conversation AI (대화형 AI)</h4>
<ul>
<li>대화형 AI인 챗봇을 통해 인간과 의사소통을 할 수 있는 방법</li>
<li>ex) 상담원의 통화가 어려울 시, 챗봇을 통해 수리 서비스 관련된 상담이 가능합니다.</li>
</ul>
<h3 id="🌌-microsoft-azure의-ai">🌌 Microsoft Azure의 AI</h3>
<h4 id="🪐-data-storage">🪐 Data storage</h4>
<ul>
<li>Azure Storage 플랫폼은 최신 데이터 스토리지 시나리오를 위한 Microsoft의 클라우드 스토리지 솔루션입니다. 핵심 스토리지 서비스는 데이터 개체를 저장하는 대규모 확장 가능한 개체 저장소, Azure VM(가상 머신)용 디스크 스토리지, 클라우드용 파일 시스템 서비스, 신뢰할 수 있는 메시징의 메시징 저장소 및 NoSQL 저장소를 제공합니다. </li>
</ul>
<h4 id="🪐-compute">🪐 Compute</h4>
<ul>
<li>클라우드에서 제공되는 컴퓨팅 또는 서버 리소스를 의미합니다.</li>
</ul>
<h4 id="🪐-services">🪐 Services</h4>
<ul>
<li>전반적인 제품 서비스를 의미합니다.</li>
</ul>
<h4 id="🪐-azure-machine-learning">🪐 Azure Machine Learning</h4>
<ul>
<li>코딩을 하지 않고 Drag&amp;Drop으로 데이터를 불러와 분석하고 알고리즘을 만들어 모델링을 한 다음, 새로운 데이터를 넣어 검증 및 예측할 수 있습니다. ML(기계 학습)은 데이터의 수학적 모델을 사용하는 프로세스로서 직접 명령 없이 컴퓨터가 학습하도록 지원합니다. AI(인공 지능)의 하위 집합으로 간주됩니다. 기계 학습은 알고리즘을 사용하여 데이터 내의 패턴을 식별하고, 이러한 패턴을 사용하여 예측을 할 수 있는 데이터 모델을 만듭니다. 인간이 연습을 통해 개선하는 방식과 매우 흡사하게, 기계 학습 역시 데이터와 환경이 향상되면 결과도 더욱 정확해집니다.</li>
</ul>
<h4 id="🪐-cognitive-services">🪐 Cognitive Services</h4>
<ul>
<li>Cognitive Services는 기계 학습 분야의 전문 지식이 없어도 모든 개발자가 손쉽게 AI를 사용할 수 있도록 지원합니다. API 호출만으로 보고, 듣고, 말하고, 검색하고, 이해하고, 의사 결정을 빠르게 내리는 기능을 앱에 포함할 수 있습니다. 다양한 기술 수준의 개발자가 앱에 AI 기능을 쉽게 추가할 수 있습니다.</li>
<li>ex) UBER – 택시 기사의 사진과 현재 얼굴을 인공지능이 분석합니다.</li>
</ul>
<h4 id="🪐-azure-bot-service">🪐 Azure Bot Service</h4>
<ul>
<li>봇 서비스 개발 및 관리를 위한 클라우드 기반 플랫폼입니다. 데이터의 제어를 유지하면서 엔터프라이즈급 대화형 AI 환경을 개발합니다. 봇에 Azure Cognitive Services의 고품질 AI 기능을 적용합니다. 봇이 자연어로 그리고 브랜드를 떠오르게 하는, 브랜드만큼 고유한 단 하나 뿐인 음성으로 상호 작용할 수 있습니다.</li>
</ul>
<h2 id="🚀-2-ai의-책임">🚀 2. AI의 책임</h2>
<h3 id="🌌-ai의-도전과-위험성">🌌 AI의 도전과 위험성</h3>
<h4 id="bias-can-affect-results편견은-결과에-영향을-줄-수-있음">Bias can affect results(편견은 결과에 영향을 줄 수 있음)</h4>
<ul>
<li>나쁜 편견에 의해 머신 러닝이 학습이 된다면 새로 만든 모델이 잘못 개발될 가능성이 크고 편견을 가질 수 있습니다.</li>
</ul>
<h4 id="errors-may-cause-harm-오류는-해를-끼칠-수-있음">Errors may cause harm (오류는 해를 끼칠 수 있음)</h4>
<ul>
<li>자율 주행 차량, 병을 진단하는 인공지능 코딩의 오류가 있다면 치명적입니다.</li>
</ul>
<h4 id="data-could-be-exposed-데이터가-노출될-수-있음">Data could be exposed (데이터가 노출될 수 있음)</h4>
<ul>
<li>환자 데이터의 노출, 개인 신변 및 보호 받아야 할 데이터들이 외부 유출 될 가능성에 대해 주의를 기울여야 합니다.</li>
</ul>
<h4 id="solutions-may-not-work-for-everyone-솔루션이-누구에게나-통하지-않을-수-있음">Solutions may not work for everyone (솔루션이 누구에게나 통하지 않을 수 있음)</h4>
<ul>
<li>시각 및 청각 장애인 등 다양한 솔루션을 통해 사용할 수 있는 방법을 고려해야 합니다.</li>
</ul>
<h4 id="user-must-trust-a-complex-system-ai사용자는-복잡한-시스템을-신뢰해야-함">User must trust a complex system AI(사용자는 복잡한 시스템을 신뢰해야 함)</h4>
<ul>
<li>AI의 증권 상품 추천에 대하여 AI에 대한 신뢰가 없다면 AI 서비스를 사용하는 것이 불가능합니다.</li>
</ul>
<h4 id="whos-liable-for-ai-driven-decisionsai가-주도한-결정은-누구-책임일까">Who&#39;s liable for AI-driven decisions?(AI가 주도한 결정은 누구 책임일까)</h4>
<ul>
<li>인공지능 판사가 주도한 결정이 잘못될 경우 책임에 대한 위험이 존재합니다.</li>
</ul>
<h3 id="🌌-책임감-있는-ai가-되기-위한-원칙">🌌 책임감 있는 AI가 되기 위한 원칙</h3>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/6106bb20-09ed-41fb-b4dc-484a9d9c9052/image.png" alt=""></p>
<h4 id="🪐-fairness-공정성">🪐 Fairness (공정성)</h4>
<ul>
<li>남자라 해서 여자보다 대출이 잘되면 안됩니다. 주어진 상황에 대해 공정해야 합니다.</li>
</ul>
<h4 id="🪐-reliability--safety-신뢰-및-안정성">🪐 Reliability &amp; Safety (신뢰 및 안정성)</h4>
<ul>
<li>AI 기술에 대해 신뢰할 수 있어야 하고 오류 없이 안전해야 합니다.</li>
</ul>
<h4 id="🪐-privacy--security-보안--개인정보">🪐 Privacy &amp; Security (보안 &amp; 개인정보)</h4>
<ul>
<li>국가마다 따라야 하는 컴플라이언스 이슈를 지켜야 합니다.</li>
</ul>
<h4 id="🪐-inclusiveness-포괄적">🪐 Inclusiveness (포괄적)</h4>
<ul>
<li>정상적인 사람 뿐만 아니라 장애인들 또한 서비스를 누릴 수 있어야 합니다.</li>
</ul>
<h4 id="🪐-transparency-투명성">🪐 Transparency (투명성)</h4>
<ul>
<li>모든 정보를 투명하게 공개할 수 있어야 합니다.</li>
</ul>
<h4 id="🪐-accountability-책임감">🪐 Accountability (책임감)</h4>
<ul>
<li>AI의 결정에 대한 책임감이 있어야 합니다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[AI-900 자격증?]]></title>
            <link>https://velog.io/@sumin_lee_317/AI-900-%EC%9E%90%EA%B2%A9%EC%A6%9D</link>
            <guid>https://velog.io/@sumin_lee_317/AI-900-%EC%9E%90%EA%B2%A9%EC%A6%9D</guid>
            <pubDate>Wed, 26 Oct 2022 16:34:23 GMT</pubDate>
            <description><![CDATA[<p><a href="https://edu.gitgo.co.kr/courses/course-v1:Squarenet+SQN902x+2021_Y1/courseware/dd7ba3e74b8d4e68920b6ee7eb39e450/37d654e1029348ac9e5151b47f3a2d42/?child=first">강좌 링크</a></p>
<h3 id="microsoft-azure-ai-fundamentalsai-900">Microsoft Azure AI Fundamentals(AI-900)</h3>
<ul>
<li>인공지능 <strong>국제</strong> 자격증</li>
<li>인공지능에 대한 기본적인 역량을 측정하는 시험</li>
</ul>
<h3 id="시험정보">시험정보</h3>
<ul>
<li>시험방식: 객관식, 선택형</li>
<li>시험시간: 45분</li>
<li>문항수: 약 40개</li>
<li>합격선: 700점/1000점</li>
<li>결과: 응시 후 바로 나옴, 약 1시간 뒤 자격증 pdf 출력 가능</li>
</ul>
<h3 id="유형">유형</h3>
<ol>
<li>인공지능 시작하기</li>
<li>머신 러닝 (ML)</li>
<li>컴퓨터 비전 (CV)</li>
<li>자연어 처리</li>
<li>대화형 AI</li>
</ol>
<p><img src="https://velog.velcdn.com/images/sumin_lee_317/post/498ac72e-2e77-4d12-a3ed-9fe399a6396b/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>