728x90

데이타베이스에서 자료를 가져와서 table로 표현하는 작업에서 동적으로 rowspan을 해야할 필요가 생겨서 검색후

아래처럼 사용했다

<!-- 동적으로 합치기 -->    
<tr>        
  <td class="table_id">차감        </td>                
  <td>        </td>    
</tr>

<script>        
$(".table_id").each(function () {             
  var rows = $(".table_id:contains('" + $(this).text() + "')");             
  console.log(rows);            
  if (rows.length > 1) { 
      //동일한 rows값이 1개 이상이면 열을 합침             
      rows.eq(0).attr("rowspan", rows.length);             
      rows.not(":eq(0)").remove();             
  }        
  }); 
</script>

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업,인공지능프로젝트

 

728x90
728x90

document.createElement('form')을 사용하여 새로운 form 엘리먼트를 만들고, window.open()을 사용하여 새 창을 열 수 있습니다.

다음은 예시 코드입니다.

// 새로운 form 엘리먼트 생성
const form = document.createElement('form');
form.action = 'submit.php';
form.method = 'POST';

// 폼에 추가할 입력 필드 생성
const nameInput = document.createElement('input');
nameInput.type = 'text';
nameInput.name = 'name';
nameInput.value = 'John';
form.appendChild(nameInput);

const emailInput = document.createElement('input');
emailInput.type = 'email';
emailInput.name = 'email';
emailInput.value = 'john@example.com';
form.appendChild(emailInput);

// 새 창 열기
form.setAttribute("target", "_blank");
document.body.appendChild(form);


// 폼 전송
form.submit();

위의 코드에서, form 엘리먼트를 생성하고 action과 method 속성을 설정합니다. 그리고 input 필드를 생성하고 form에 추가합니다. window.open() 메서드를 사용하여 새 창을 엽니다. 새 창에는 form 엘리먼트를 추가합니다. 마지막으로, form.submit() 메서드를 사용하여 폼을 전송합니다.

 

이렇게 하면 새 창이 현재 창 대신 새로운 창에서 열립니다.

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업,인공지능프로젝트

728x90
728x90

벡터

    벡터(Vector)는 크기와 방향을 가지는 양(Quantity)을 나타내는 개념입니다. 벡터는 화살표 형태로 표현되며, 화살표의 시작점은 벡터의 원점(Origin)이고, 화살표의 끝점은 벡터의 방향과 크기를 나타냅니다.

벡터는 일반적으로 n개의 숫자로 이루어진 열벡터(Column Vector)나 행벡터(Row Vector)로 표현됩니다. 예를 들어, 2차원 벡터는 아래와 같이 나타낼 수 있습니다.

[ x ]

[ y ]

    이 때, x와 y는 벡터의 각각의 요소(Element)를 나타냅니다. 벡터의 크기는 각 요소의 제곱합의 제곱근으로 정의됩니다. 따라서 2차원 벡터 (x, y)의 크기는 √(x^2 + y^2)로 표현됩니다.

벡터는 다양한 분야에서 사용됩니다. 물리학에서는 위치, 속도, 가속도 등을 벡터로 표현합니다. 컴퓨터 그래픽스에서는 벡터를 사용하여 3D 모델을 회전시키거나 크기를 변경합니다. 또한, 머신 러닝과 딥 러닝에서는 벡터를 사용하여 데이터를 표현하고, 학습 모델을 구축하고 예측합니다.

 

공변 벡터(Covariant Vector)와 반변 벡터(Contravariant Vector)

    공변 벡터(Covariant Vector)와 반변 벡터(Contravariant Vector)는 다차원 공간에서 벡터의 변환을 설명하는 데 사용되는 선형 대수학적인 개념입니다.

공변 벡터는 좌표계의 변환에 따라 벡터의 크기와 방향이 변하지 않는 벡터입니다. 이러한 특성 때문에 공변 벡터는 좌표계의 원점과 함께 위치하는 벡터로도 볼 수 있습니다. 예를 들어, 평면상의 벡터 (x, y)는 원점에서 시작하고 x축과 y축의 방향으로 각각 x와 y만큼 이동하는 벡터입니다. 이러한 공변 벡터는 좌표계의 변환이 일어날 때, 새로운 좌표계에서도 크기와 방향이 변하지 않습니다.

    반면에 반변 벡터는 좌표계의 변환에 따라 벡터의 크기는 변하지 않고 방향만 변하는 벡터입니다. 반변 벡터는 물리학에서 주로 사용되며, 예를 들어, 자기장과 같이 방향이 중요한 양(Quantity)을 나타내는 데에 사용됩니다. 예를 들어, 자기장 벡터 B는 모든 좌표계에서 크기는 동일하지만, 방향은 좌표계에 따라 달라집니다.

따라서, 공변 벡터와 반변 벡터는 벡터의 크기와 방향에 대한 변환이 어떻게 이루어지는지를 나타내는 개념입니다.

    일단 '공'이 함께라는 뜻이고 '반'이 반대라는 뜻으로 공변벡터는 좌표계가 변하는 것과 같은 방식으로 '함께' 변하는 것을 말한다. 반대로 반변벡터는 좌표계가 변하는 것과는 '반대'의 방식으로 변하는 벡터를 뜻한다

 

행렬

    행렬(Matrix)은 숫자들을 직사각형 모양의 격자 형태로 배열한 것입니다. 예를 들어, 2행 3열의 행렬은 아래와 같이 나타낼 수 있습니다.

[ 1 2 3 ]

[ 4 5 6 ]

위의 예시에서, 각각의 숫자를 행렬의 요소(Element)라고 부릅니다. 첫 번째 행의 요소들은 1, 2, 3이고, 두 번째 행의 요소들은 4, 5, 6입니다.

    행렬은 다양한 분야에서 사용됩니다. 선형 대수학에서는 행렬을 활용하여 연립방정식을 해결하거나 선형 변환(linear transformation)을 표현합니다. 또한, 통계학에서는 데이터 분석을 위해 행렬을 사용합니다. 머신 러닝과 딥 러닝에서도 행렬은 데이터를 표현하고 연산하는 데에 매우 중요합니다.

    행렬은 일반적으로 행과 열의 개수를 나타내는 행렬의 크기(Dimension)로 표현됩니다. 위의 예시에서는 2행 3열의 행렬이며, 이를 2x3 행렬이라고 표현합니다. 행렬의 크기는 보통 m x n으로 표현하며, 여기서 m은 행의 개수, n은 열의 개수를 의미합니다.

 

 

텐서

    텐서(Tensor)는 다차원 배열(Multi-dimensional array)을 나타내는 수학적 개념입니다. 벡터(Vector)와 매트릭스(Matrix)가 각각 1차원과 2차원 배열을 나타내는 것처럼, 텐서는 3차원 이상의 다차원 배열을 나타냅니다.

예를 들어, 3x3x3 크기의 텐서는 3개의 3x3 매트릭스를 가지고 있으며, 4x5 크기의 텐서는 4개의 5차원 벡터를 가지고 있습니다.

    텐서는 다양한 분야에서 사용되며, 특히 딥러닝(Deep Learning) 분야에서는 텐서를 활용하여 데이터를 표현하고 처리합니다. 딥러닝에서는 주로 텐서를 사용하여 이미지, 텍스트, 음성 등의 다양한 유형의 데이터를 처리하며, 이를 통해 학습 모델을 구축하고 예측을 수행합니다.

또한, 텐서는 텐서곱(Tensor Product)이라는 수학 연산을 가능하게 하여 선형 대수학에서도 널리 사용됩니다.

 

행렬의 1차변환

    행렬의 1차변환(First-order Transformation)은 원점을 중심으로 하는 선형 변환을 나타내는 행렬입니다. 1차변환은 일반적으로 2D나 3D 그래픽스에서 객체를 이동, 회전, 크기 변경하는 데에 사용됩니다.

2D 그래픽스에서, 1차변환은 아래와 같은 행렬로 표현됩니다.

| a b | | c d |

이 때, a와 d는 객체를 x축과 y축 방향으로 확대시키거나 축소시키는 크기 변환(scale transformation)을 의미합니다. b와 c는 객체를 x축과 y축 방향으로 이동시키는 이동 변환(translation transformation)을 의미합니다.

3D 그래픽스에서, 1차변환은 아래와 같은 행렬로 표현됩니다.

 

| a b c 0 |

| d e f 0 |

| g h i 0 |

| 0 0 0 1 |

 

이 때, a, e, i는 객체를 x축, y축, z축 방향으로 확대시키거나 축소시키는 크기 변환을 의미합니다. b, c, d, f, g, h는 객체를 x축, y축, z축 방향으로 이동시키는 이동 변환을 의미합니다.

1차변환 행렬은 선형 대수학에서 기하학적인 변환을 행렬 연산으로 표현하는 데에 사용됩니다. 이를 통해 객체의 이동, 회전, 크기 변경을 효율적으로 계산할 수 있습니다

 

import argparse

    argparse는 Python의 표준 라이브러리 중 하나로서, 명령줄 인터페이스(Command-line Interface)를 쉽게 만들 수 있도록 도와주는 모듈입니다.

argparse는 프로그램 실행 시 사용자로부터 입력받은 인자들을 파싱하고 처리하기 위한 기능을 제공합니다. 예를 들어, 사용자가 프로그램 실행 시 인자로 파일 이름, 디렉토리 경로, 특정 기능 등을 전달하면, argparse는 이러한 인자를 처리하고 프로그램이 올바르게 동작하도록 도와줍니다.

argparse는 아래와 같은 기능을 제공합니다.

  • 인자 파싱을 위한 ArgumentParser 클래스
  • 인자의 이름, 타입, 기본값, 도움말 메시지 등을 설정하기 위한 add_argument() 메서드
  • 인자를 파싱한 결과를 저장하기 위한 Namespace 클래스
  • 인자 파싱 중에 발생하는 에러 처리를 위한 예외 처리

argparse는 매우 유용한 모듈로서, 다양한 유형의 명령줄 인터페이스를 쉽게 만들 수 있습니다. 이를 통해 사용자가 프로그램을 쉽게 이해하고 사용할 수 있도록 도와줍니다.

from pathlib import Path

    pathlib은 Python 3.4부터 추가된 모듈로서, 파일 경로(Path)를 다루기 위한 클래스를 제공합니다. pathlib 모듈은 이전에 사용되던 os나 os.path 모듈보다 객체지향적인 인터페이스를 제공하며, 코드를 더 직관적으로 작성할 수 있도록 도와줍니다.

Path 클래스는 파일 경로를 다루기 위한 메서드와 속성을 제공합니다. 이를 통해 파일의 존재 여부, 디렉토리 경로, 파일 이름, 확장자 등을 쉽게 다룰 수 있습니다. 예를 들어, 아래와 같은 코드를 작성하여 파일이 존재하는지 여부를 확인할 수 있습니다.

from pathlib import Path

my_file = Path("my_file.txt")

if my_file.is_file():
    print("File exists")
else:
    print("File does not exist")

Path 클래스는 다양한 메서드와 속성을 제공하며, 파일 경로를 다루는 데에 매우 유용합니다. pathlib 모듈을 사용하면 파일 경로를 다루는 코드를 더 직관적이고 간결하게 작성할 수 있습니다.

 

from models.common import DetectMultiBackend

    from models.common import DetectMultiBackend은 models 패키지 내부의 common 모듈에서 DetectMultiBackend 클래스를 가져오는 코드입니다.

DetectMultiBackend 클래스는 객체 검출(Object Detection) 모델에서 다양한 백엔드(backend)를 사용할 수 있도록 지원하는 클래스입니다. 이 클래스는 여러 개의 백엔드를 선택적으로 사용할 수 있도록 하며, 백엔드를 변경할 때마다 모델의 입력과 출력 형식을 자동으로 조정합니다.

이 클래스는 객체 검출 모델의 구현에 매우 유용합니다. 객체 검출 모델에서는 여러 개의 백엔드 중에서 최적의 백엔드를 선택하고, 해당 백엔드에 맞는 입력과 출력 형식을 사용해야 합니다. DetectMultiBackend 클래스는 이러한 작업을 쉽게 처리할 수 있도록 도와줍니다.

따라서 from models.common import DetectMultiBackend은 DetectMultiBackend 클래스를 가져와서 객체 검출 모델을 구현할 때 활용할 수 있는 코드입니다.

 

from utils.dataloaders import IMG_FORMATS, VID_FORMATS

    from utils.dataloaders import IMG_FORMATS, VID_FORMATS는 utils 패키지 내부의 dataloaders 모듈에서 IMG_FORMATS와 VID_FORMATS 변수를 가져오는 코드입니다.

IMG_FORMATS는 이미지 파일의 확장자를 리스트 형태로 저장한 변수입니다. 예를 들어, ['.jpg', '.jpeg', '.png']와 같이 이미지 파일의 확장자가 저장되어 있습니다.

VID_FORMATS는 동영상 파일의 확장자를 리스트 형태로 저장한 변수입니다. 예를 들어, ['.mp4', '.avi', '.mov']와 같이 동영상 파일의 확장자가 저장되어 있습니다.

이 변수들은 데이터 로딩(Data Loading) 과정에서 사용됩니다. 데이터 로딩은 모델 학습을 위해 데이터를 읽어오는 과정을 말합니다. 이미지나 동영상 데이터를 읽어오기 위해서는 데이터 파일의 경로와 파일 확장자를 알아야 합니다. 이 때 IMG_FORMATS와 VID_FORMATS 변수를 사용하여 이미지와 동영상 파일의 확장자를 정의할 수 있습니다. 이를 통해 데이터 로딩 코드를 더욱 간결하게 작성할 수 있습니다.

따라서 from utils.dataloaders import IMG_FORMATS, VID_FORMATS는 데이터 로딩 과정에서 이미지와 동영상 파일의 확장자를 정의하기 위해 사용되는 코드입니다.

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

 

 

728x90
728x90

요즘 yolov5를 이용한 이미지 분석에 푹 빠져있다.

그러다 보니 잘 사용하지 않았던 python 소스를 분석하여야만 했다.

 

근데 내가 기존에 사용하던  언어의 지식으로는 도저히 이해가 되지 않아서 오늘 날잡고 소스 하나하나 분석을 시작했다.

그러다가 구글링하다 찾은 페이지 하나로 궁금증이 싹 해소됐다.

요즘 프로그램은 예전에 몰랐던 새로운 방식이 정말 많아졌다

 

l = [1]
for x in l:
    l.append(x + 1)
    print(x)
    
================ 답 ==========
1
2
3
4
5

7
....

 이렇게 배열이 증가 하기 때문에 무한 반복되는 것이었다.

참 기발한 방법이다

 

 

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

728x90
728x90

1. 산술 연산자

  • 더하기(+): 두 개의 값을 더할 때 사용합니다.
  • 빼기(-): 첫 번째 값을 두 번째 값에서 뺄 때 사용합니다.
  • 곱하기(*): 두 개의 값을 곱할 때 사용합니다.
  • 나누기(/): 첫 번째 값을 두 번째 값으로 나눌 때 사용합니다.
  • 나머지(%, Modulo): 첫 번째 값을 두 번째 값으로 나누고 나머지 값을 구할 때 사용합니다.
  • 몫(//, Floor Division): 첫 번째 값을 두 번째 값으로 나눈 후 소수점 이하를 버린 몫을 구할 때 사용합니다.
  • 거듭제곱(**): 첫 번째 값을 두 번째 값 만큼 거듭제곱할 때 사용합니다

2. 할당 연산자

  • 등호(=): 오른쪽 값을 왼쪽 변수에 할당합니다.
  • 더하기와 할당(+=): 왼쪽 변수에 오른쪽 값을 더하고 그 결과를 왼쪽 변수에 할당합니다.
  • 빼기와 할당(-=): 왼쪽 변수에서 오른쪽 값을 빼고 그 결과를 왼쪽 변수에 할당합니다.
  • 곱하기와 할당(*=): 왼쪽 변수에 오른쪽 값을 곱하고 그 결과를 왼쪽 변수에 할당합니다.
  • 나누기와 할당(/=): 왼쪽 변수를 오른쪽 값으로 나누고 그 결과를 왼쪽 변수에 할당합니다.
  • 나머지와 할당(%=): 왼쪽 변수를 오른쪽 값으로 나눈 나머지를 구하고 그 결과를 왼쪽 변수에 할당합니다.
  • 몫과 할당(//=): 왼쪽 변수를 오른쪽 값으로 나눈 몫을 구하고 그 결과를 왼쪽 변수에 할당합니다.
  • 거듭제곱과 할당(**=): 왼쪽 변수를 오른쪽 값 만큼 거듭제곱한 결과를 왼쪽 변수에 할당합니다.

3. 비교 연산자

  • 같음(==): 두 값이 같으면 True를 반환합니다.
  • 같지 않음(!=, <>): 두 값이 다르면 True를 반환합니다.
  • 작음(<): 첫 번째 값이 두 번째 값보다 작으면 True를 반환합니다.
  • 큼(>): 첫 번째 값이 두 번째 값보다 크면 True를 반환합니다.
  • 작거나 같음(<=): 첫 번째 값이 두 번째 값보다 작거나 같으면 True를 반환합니다.
  • 크거나 같음(>=): 첫 번째 값이 두 번째 값보다 크거나 같으면 True를 반환

4. 논리 연산자

  • and: 두 값이 모두 True일 때 True를 반환합니다.
  • or: 두 값 중 하나 이상이 True일 때 True를 반환합니다.
  • not: 값이 True이면 False를 반환하고, False이면 True를 반환합니다.

5. 비트 연산자

  • 비트 AND(&): 두 개의 이진수에서 해당 비트가 모두 1일 때 1을 반환합니다.
  • 비트 OR(|): 두 개의 이진수에서 해당 비트 중 하나라도 1이면 1을 반환합니다.
  • 비트 XOR(^): 두 개의 이진수에서 해당 비트가 다를 때 1을 반환합니다.
  • 비트 NOT(~): 모든 비트를 반전합니다.
  • 왼쪽 시프트(<<): 이진수를 왼쪽으로 지정한 비트 수만큼 이동합니다.
  • 오른쪽 시프트(>>): 이진수를 오른쪽으로 지정한 비트 수만큼 이동합니다.

6. 멤버십 연산자

  • in: 값이 시퀀스에 포함되어 있으면 True를 반환합니다.
  • not in: 값이 시퀀스에 포함되어 있지 않으면 True를 반환합니다.

7. 항등 연산자

  • is: 두 개의 객체가 동일한 객체를 참조하면 True를 반환합니다.
  • is not: 두 개의 객체가 동일한 객체를 참조하지 않으면 True를 반환합니다.

8. 기타 연산자

  • 콤마(,): 값들을 나열할 때 사용합니다.
  • 콜론(:): 슬라이싱, for 루프, if문, 함수 정의 등에서 사용합니다.
  • 물음표(?): 객체나 모듈의 정보를 확인할 때 사용합니다.
  • @: 행렬 곱셈을 할 때 사용합니다. (Python 3.5 이상에서 사용 가능합니다.)

위에서 설명한 파이썬의 다양한 기호들은 프로그래밍에서 매우 유용하게 사용되며, 다양한 연산을 수행할 수 있도록 해줍니다.

 

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

 

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

 

728x90
728x90

리눅스는 GUI를 사용하지 않아서 yolov5가 엄청 많은 에러를 뿜어냈다.

2틀을 허비한 후 결구 테스트에 성공한 장면을 촬영했다

아래 영상은 mobaxter으로 putty 접속해서 실행한 장면이다

 

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

 

728x90
728x90

처음에는 거래처마다 IP카메라를 설치할 생각이었다.

프로젝트를 진행하다가 보니,아무래도 전국의 프랜차이즈 마다 출장을 가서 카메라를 설치 한다는 것은

큰 부담이 되었다.

그래서 방법을 찾다보니 RTSP프로토콜로 접속하면 된다는 것을 알게 되었다.

바쁜 프로젝트로 인해서 테스트를 미루다가 오늘서야 차분히 맘먹고 실행하게 되었다

이제 강화학습을 거치고, 영상분석 알고리즘만 넣으면 될거 같다.

몇개월간 미루던 일을 마무리 했다 ㅎㅎ.

 

 

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

 

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

아래 영상은 유튜브 실시간 방송으로 테스트한 자료이다

 

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

 

728x90
728x90

몇시간을 허비한줄 모른다.

맨위의 script 2줄을 첨부 안해서 안되는줄 모르고 많이 헤맸다 ㅎㅎ

아래처럼 하면 Database 내용이 멋지게 표시된다

 

<script src="https://unpkg.com/bootstrap-table@1.21.2/dist/bootstrap-table.min.js"></script>
<script src="/asset/bootstrap-table-ko-KR.js"></script>

<div class="modal-body">
                <table id="tableFuneralList"
                        data-toggle="table"
                        data-pagination="true"
                        pageSize: 5,
                        data-search="true"
                        data-single-select="true"
                        data-ajax="ajaxRequest"
                        data-click-to-select="true"
                        class="display tableFuneralList" style="width:100%">
                    <thead>
                        <tr>
                            <th data-field="state" data-checkbox="true"></th>
                            <th data-field="번호1">번호1</th>
                            <th data-field="번호2">번호2</th>
                            <th data-field="번호3">번호3</th>
                        </tr>
                    </thead>
                </table>
            </div>
            
 <script>
        function ajaxRequest(params) {
            $.ajax({
                type: "POST",
                url: "ajax_loader.php",
                data: "user-id=1",
                dataType: "json",
                success: function (data) {
                    params.success({
                         "rows": data,
                         "total": data.length
                    })
                },
                error: function (er) {
                    params.error(er);
                }
            });
            }
</script>
<?php
$data = array();

$sql = "";
$sql = $sql." select * from tb ";
$sql = $sql." order by  field_name  asc";
// echo $sql;

$result = mysqli_query($conn,$sql) or die("문장에러!");
$num_rows = mysqli_num_rows($result);
if($num_rows > 0)
{
    while ($row=mysqli_fetch_array($result))
    {
        array_push($data, array("번호"=> $row['no1'], 
        "번호2"=> $row['no2'],
        "번호3"=> $row['no3']));
             }
}
echo json_encode($data);
?>

목동코딩학원 : 온라인코딩교육, 유니티게임개발교육, 로블록스게임개발교육, 한국서비스산업진흥원, 플랫폼프로젝트수업

728x90

+ Recent posts