본문 바로가기

전체 글358

Python openCV (어파인, 크기변환, 영상회전, 보간법, 투시변환) 영상의 기하학적 변환 - 영상의 밝기, 명암비 조절, 필터링 등은 픽셀 위치는 고정한 상태에서 픽셀 값만 변경했지만, 기하학적 변환이라는 것은 픽셀 값은 그대로 유지하면서 위치를 변경하는 작업 - 영상을 구성하는 픽셀의 배치 구조를 변경함으로 전체 영상의 모양을 바꾸는 작업 ✔ 어파인 변환(affine transformation) 영상을 평행 이동시키거나 회전, 크기 변환 등을 통해 만들 수 있는 변환을 통칭 영상에서 (x,y) 좌표의 픽셀을 결과 영상의 (x' , y') 좌표로 변환하는 방법 { x' = f1(x, y), y' = f2(x, y) } { x' = f1(x, y) = ax + by + c, , y' = f2(x, y) = dx + ey + f } 위 수식을 행렬을 이용하여 아래와 같이 표.. 2023. 3. 9.
Python openCV 기본 영상(image) 픽셀(pixel) : 바둑판 모양의 격자에 나열괴어 있는 형태, 2차원 행렬 1. 그레이스케일 영상 - 흑백사진처럼 색상 정보가 없는 영상 - 밝기 정보만으로 구성된 영상 - 밝기 정보는 256단계로 표현(0 ~ 255) - numpy.uint8 = 8bit = 1byte - 가로크기 * 세로크기 = 28 * 28 = 784 bytes 2. 트루컬러 영상 - 컬러사진처럼 색상 정보를 가지고 있기 때문에 다양한 색상을 표현할 수 있는 영상 - red, green, blue 색 성분을 사용하고, 각 256단계로 표현 - 픽셀의 표현 -> (255, 255, 255) - 튜플, numpy.ndarray = 3byte - 가로크기 * 세로크기 * 3 = 28 * 28 * 3 = 2352 byt.. 2023. 3. 8.
Spring WatchaPedia 클론코딩 프로젝트 취향 분석(선호 배우, 국가, 장르, 감상 시간) 🎬 선호배우 분석 Service public List peopleCnt(Long userIdx){ Map peopleMap = new HashMap(); List movIdxs = starRepository.findStarMovie(userIdx); List peopleList = List.of(movieRepository.findPeopleList(movIdxs).toString() .split("\\[")[1].split("]")[0].split(", ")); for(String str: peopleList){ String[] personList = str.split(","); for(String per : personList){ if(per.contains("주연")){ Long personIdx .. 2023. 3. 8.
Spring 클론코딩 프로젝트 취향분석( 유저정보, 평가수, 별점분포) 🎬 취향분석 유저 아이디 타임리프 입력 부분 취향분석 ㅁㄴㅇ tb_user 테이블에 있는 해당 로그인한 정보를 출력하는 부분이다. 🎬 취향분석 유저 평가수 타임리프 부분 37 영화 21 TV 프로그램 11 책 20 웹툰 해당 콘텐츠에 대한 별점의 수를 합처 출력하는 부분이다. 🎬 취향분석 유저 평가 별점 분포 타임리프 부분 대중의 평가에 잘 휘둘리지 않는 '지조파' 해당 사용자가 준 별점의 평가를 기준으로 사용자의 성향을 글로 표현하였다. 기존 왓챠피디아는 20여개 이상의 별점 성향이 존재하지만 클론코딩간 많은 데이터가 존재하지 않고 동일한 기능의 반복이기 때문에 '독수리파'와 같이 특정 3개의 성향을 표출하였다. 그래프 표현 방식은 기존 DetailPage의 그래프 방식과 유사하다. 🎬 취향분석 유저 .. 2023. 3. 7.
Spring 클론코딩 프로젝트 콘텐츠 DetailPage( 비슷한 장르의 작품 추천) 🎬 MovieRespose - Containing 이용하여 유사 장르 뽑기 List findByMovGenreContaining(String genre); 🎬 MovieService @Transactional(readOnly = true) public List similarGenre(String genre, Long movieIdx){ List result = new ArrayList(); List movieIdxList = new ArrayList(16); if(genre.contains("/")){ List genreList = Arrays.stream(genre.split("/")).toList(); HashMap containMovie = new HashMap(); for(String idx: g.. 2023. 3. 6.
Spring 클론코딩 프로젝트 콘텐츠 DetailPage( 감상 가능한 곳, 유튜브(youtube) 예고편, 겔러리) 🎬 감상가능한 곳 타임리프 tb_movie 테이블의 mov_watch 컬럼에서 해당 movieIdx 값을 통해 해당하는 링크와 이미지 이름을 주기위해 타임리프에서 splt과 삼항연산자를 이용하여 구현하였다. th:title="${#strings.contains(wat,'aHR0cHM6Ly93d3cubmV0ZmxpeC5jb20vdGl0b')} or ${#strings.contains(wat,'netflix')}? '넷플릭스' : 1. {#strings.contains(wat,'aHR0cHM6Ly93d3cubmV0ZmxpeC5jb20vdGl0b' 이 부분은 넷플릭스의 고유 주소 값이다. 2. netflix 가 포함되어도 넷플릭스인걸 알 수 있기 때문에 타임리프에서 or 조건을 사용해서 1번과 2번이 포함되면.. 2023. 3. 5.
Spring 클론코딩 프로젝트 콘텐츠 DetailPage( 출연/제작) ✔ 출연/제작 - Controller 부분 // 인물 리스트 List peopleList = new ArrayList(); List people = new ArrayList(); List personList = new ArrayList(); if(movie.people() != null){ peopleList = List.of(movie.people().split(",")); for(String per : peopleList){ people.add(per.split("\\(")[0] + "," + per.split("\\(")[1].split("\\)")[0]); } } try{ personList = personService.personList(people); }catch (Exception e){ S.. 2023. 3. 5.
Spring 클론코딩 프로젝트 콘텐츠 DetailPage(별점,별점 그래프, 해당 유저 별점 달았는지) ✔ MovieController - @RequesdtMapping("/movie") 기본 주소 @Controller @RequestMapping("/movie") @RequiredArgsConstructor ✔ @GetMapping("/{movieIdx}") // http://localhost:8080/movie/1 @GetMapping("/{movieIdx}") // http://localhost:8080/movie/1 public String movieDetail( @PathVariable Long movieIdx, @PageableDefault(size = 5, sort = "commIdx", direction = Sort.Direction.DESC) Pageable pageable, ModelMa.. 2023. 3. 4.
Spring 프로젝트 별점 순 출력 /* 별점 높은순 출력, 어느정도 인원이 평가해야(타임리프 적용) 0명이 평가한 경우 한명이 바로 5점을 주면 1등이 나오기 때문*/ @Transactional(readOnly = true) public List movieStar() { //평균 구하기 List result = new ArrayList(); // 평균점수가 최소 4.2 이상인 : 설정을 안할 경우 데이터가 없을경우 1점도 들어갈 수 있음 List result2 = new ArrayList(); // 평가한 인원이 최소 5명인 : 평가자가 0명인 경우 처음 평가한 이가 5점을 주면 바로 최고 점수 List result3 = new ArrayList(); List movieStar = movieRepository.findAll(); for(.. 2023. 3. 4.