'전체 글'에 해당되는 글 44건
- 2021.08.19 웹캠이 흑백으로 나와요. 해결방법(feat. 뒤늦은 삼성 노트북 A/S 후기) 2
- 2021.07.16 vimrc
- 2021.06.16 Matlab과 Python에서의 image 좌표축 한번에 정리!
어느 날부터 웹캠이 흑백으로 나온다면 아래의 방법을 시도해보자.
Microsoft 공식 홈페이지를 포함해서 대부분의 Solution들이 드라이버 업데이트/재설치, 윈도우 업데이트/재설치를 이야기 하는데 정말 간단한 문제일 수 있다.
1. 카메라 고급 옵션 접근
먼저 Skype를 실행한다. 언젠가부터 Microsoft가 Microsoft Teams랑 Skype를 쥐도 새도 모르게 깔아놓던데 아주 마음에 안든다. Skype가 깔려있지 않다면 찾아서 설치하자. 카메라 고급 옵션에 접근하는 다른 방법도 있을텐데 (video stream을 사용하는 다른 소프트웨어도 가능하지 않을까? OBS Studio 라던가) 이게 가장 간단하다.
2. 카메라 고급 옵션 기본값으로 초기화.
Skype 뿐만 아니라 Zoom, Kakao Talk 등 웹캠 스트리밍이 가능한 소프트웨어에서 사용자가 직접 옵션 변경을 했거나, 낮은 조도 때문에 임의로 채도 혹은 낮은 빛 보상 옵션이 변경이 되면 흑백으로 나타나는 현상이 발생한다.
문제는 대다수의 소프트웨어들이 이러한 옵션을 display 해주지 않으며, 심지어 기준이 되어 Microsoft 기본 카메라 앱에 이 옵션에 대한 접근이 불가능 하다. (이게 주 원인인것 같다. 마소 놈들....) 심지어 한번 설정한 옵션은 카메라 모듈 내부에 따로 저장이 되는지 OS 재설치를 진행해도 흑백으로 나오는 현상이 발생한다.
삼성 노트북 A/S 후기
기술 발전과 정체로 노트북 브랜드간 격차가 사라져서 큰 차이가 없으면 국산 브랜드를 애용하자는 마음으로 현 노트북으로 삼성을 골랐다. 16Gb RAM과 외장 그래픽이 같이 딸린 200만원이 넘는 노트북 9을 구입했었는데 이게 몇 시간 Unity 기반 2D 게임을 돌렸다가 블루스크린과 함께 GPU가 저세상으로 갔다. 적어도 CPU에는 온도가 너무 높아지면 성능을 임의로 저하시켜서 칩을 보호하는 기능이 있는 것으로 아는데 이 제품의 GPU에는 이것을 제대로 구현하지 않은 것인가. 강제로 오버클럭을 시키거나 Fan이 고장났거나, 온도관련 안전장치를 해제 했으면 모르겠는데 정상 사용중 GPU가 고온으로 손상되다니 이것은 명백한 설계 미스다. 심지어 사이즈를 줄이기 위해서 CPU, RAM, GPU를 한 보드 위에 몰아두어서 GPU가 나갔다고 GPU만 고칠 수 없다더라. 수리비 90만원.
그나마 삼성에서 리퍼 부품 교환 서비스를 운영하고 있어서 절반 가격인 40만원 정도에 수리를 받았으나 제품 블랙리스트를 고려할만큼 많은 실망을 안겨주었다. A/S 기사님도 되도록 새 제품을 사는 것을 권장하셨으나 구매가를 생각하면 나쁘지 않은 선택이었다고 생각한다.
센터에 간 김에 위의 웹캠이 흑백으로 나오는 문제를 같이 문의했었다. 나는 소프트웨어 문제라고 계속 주장을 했으나 A/S 기사님이 자체 카메라 검사 유틸리티를 실행해서 확인을 했는데 진단은 카메라 모듈 하드웨어 손상. 카메라가 아예 안나왔으면 안나왔지 이런 현상을 본적이 없다고 하시더라. 카메라 모듈 역시 디스플레이와 일체형이라 수리비 20만원. 얜 포기를 하고 GPU 만 수리를 받았는데 오늘에야 문제를 자체적으로 해결했다.
노트북 제품들간 차이가 줄어든 현재, 사용자 경험의 사소한 차이가 구매로 이어진다. 수리가 어려운 구조의 제품 디자인과 GPU 보조 장치/프로그램의 설계 미스, A/S 프로토콜이 짚어내지 못한 너무나도 단순한 문제 때문에 앞으로 다른 브랜드 노트북에 눈이 가게 될 것 같다.
'취미 > Technology' 카테고리의 다른 글
tensorflow에서 시작하는 pytorch 작동 방식 (iris example) (0) | 2022.02.03 |
---|---|
Notion 입문 1일차 (0) | 2022.01.11 |
리튬계 베터리와 5V (0) | 2020.10.12 |
HC-08 블루투스 모듈 아두이노 연결 (1) | 2018.09.09 |
Mendeley와 Cloud 같이 쓰기 (0) | 2018.08.24 |
서론
20년 10월부터 vim을 쓰기 시작한 이후, 전에는 어떻게 살았나 싶을 정도로 유용하게 사용하고 있다. 모든 코딩 작업은 전부 vim으로 진행을 하고, IDE의 부가적인 기능이 필요한 경우 IDE와 함께 열어서 돌릴 때만 IDE를 쓰고 그 이외의 코드 편집 작업은 vim에서 하는 방식으로도 쓴다.
8개월 가량 vim을 쓰면서 숙련도도 머리보다 손이 먼저 나갈만큼 증가했지만 vimrc 파일에도 크고작은 변화가 있었다. 특히 문제가 되었던 것은 집, 학교 컴퓨터와 노트북에 동일한 vim 환경을 구축하는 것이었는데 vimrc를 쪼개고 batch script를 만들고, git을 사용해 동일한 환경을 구축할 수 있도록 설정했다. 이 글은 최근에 바꾼 vimrc 파일을 공유하기 위함이다.
vimrc
- Plugin 관리는 Plug로 정착을 했다. 사용법이 쉽고, github 기반 plugin들은 README.md를 읽을 필요도 없이 쉽게 적용이 가능하다.
- 여러 plugin들을 테스트 해보다가 마음에 들거나 필요한게 생기면 하나씩 추가/수정을 진행했다.
- 이전 글에서 열심히 만들어두었던 python에서 선택영역을 실행하는 기능은 결국 잘 안쓰게 되더라. 이전 명령들을 보기 어려워서 그런지 편리한 IDE로 자꾸 손이 간다.
" vim runtime config file
" Written by Knowblesse 2020
" Adapted from miguelgrinberg/.vimrc
"""""""""""""""""""""""""""""""""""
" Basics "
"""""""""""""""""""""""""""""""""""
" sane text files
set fileformat=unix " uses line ending LF (not DOS-style CR LF)
set encoding=utf-8
set fileencoding=utf-8
set nu
set tabstop=4
set shiftwidth=4
set softtabstop=4
set colorcolumn=100
set expandtab
set hlsearch
if has('unix')
echo "Unix option is applied"
set guifont=Bitstream\ Vera\ Sans\ Mono\ 12
else
echo "Consier as Window OS"
set guifont=Bitstream\ Vera\ Sans\ Mono:h12
endif
" Key Bindings
imap jk <Esc>
nmap <Tab> >>
nmap <S-tab> <<
" color scheme
syntax on
colorscheme monokai
filetype on
filetype plugin indent on
"""""""""""""""""""""""""""""""""""
" Plugin "
"""""""""""""""""""""""""""""""""""
"monokai theme is manually installed
"ctag is manually installed
call plug#begin()
Plug 'yegappan/taglist'
Plug 'tpope/vim-sensible'
"Plug 'terryma/vim-multiple-cursors'
Plug 'mg979/vim-visual-multi'
"buffer lists instead of tab
Plug 'ap/vim-buftabline'
"NERD
Plug 'preservim/nerdtree'
"Git
Plug 'airblade/vim-gitgutter'
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'tpope/vim-fugitive'
"Coding
Plug 'davidhalter/jedi-vim'
Plug 'ervandew/supertab'
Plug 'dense-analysis/ale'
Plug 'itchyny/lightline.vim'
"Color theme
Plug 'joshdick/onedark.vim'
"Table generataion
Plug 'dhruvasagar/vim-table-mode'
call plug#end()
"""""""""""""""""""""""""""""""""""
" Start up Functions "
"""""""""""""""""""""""""""""""""""
"autocmd VimEnter * call StartUp()
"function! StartUp()
" if 0 == argc()
" NERDTree
" end
"endfunction
"
"""""""""""""""""""""""""""""""""""
" Plugin Options "
"""""""""""""""""""""""""""""""""""
" lightline
set noshowmode
let g:lightline = { 'colorscheme': 'onedark' }
"nerdtree
let g:nerdtree_open = 0
map <leader>t :call NERDTreeToggle()<CR>
function NERDTreeToggle()
NERDTreeToggle
if g:nerdtree_open == 1
let g:nerdtree_open = 0
else
let g:nerdtree_open = 1
wincmd p
endif
endfunction
"""""""""""""""""""""""""""""""""""
" Python "
"""""""""""""""""""""""""""""""""""
"Python execute selected line script
autocmd FileType python setlocal completeopt-=preview
python3 << EOL
import vim
def ExecuteSelectedLine(l1, l2):
for i in range(l1-1,l2):
print(">>" + vim.current.buffer[i])
exec(vim.current.buffer[i],globals())
def ExecuteExpression(exp):
print(">>" + exp)
exec(exp,globals())
EOL
command! -range Ev <line1>,<line2> python3 ExecuteSelectedLine(<line1>, <line2>)
https://github.com/knowblesse/vimrc
git integration
- 아래는 내가 git을 사용해서 vim 환경을 동일하게 유지한 방법이다.
- 새 환경을 설정할 때는 먼저 knowblesse/vimrc를 clone해서 저장해둔다.
- vim이 윈도우나 Ubuntu에서 home 경로에서 _vimrc 혹은 .vimrc을 읽기 때문에 레포에 _vimrc 파일을 만들어 두고 리눅스인경우 .vimrc, 윈도우인경우 _vimrc로 이름을 바꾸어 home 위치에 넣어주는 스크립트, 각각 setVim_linux.sh와 setVim_win.ps1을 만들어두었다.
- 이 _vimrc에는 사실 별게 들어있지 않다. 쉽게 환경별로 업데이트를 할 수 있도록 git을 clone 해둔 경로만 수정해주면 git pull을 통해서 vimrc.vim 파일이 업데이트가 되고 _vimrc가 이 .vim 파일을 읽는 방식이다.
- 그리고 왜인지 OS마다 폰트 설정 방식이 달라서 OS를 읽고 상황에 따라 다른 명령어를 적용하도록 만들어두기도 했다.
서론
Matlab이든 Python이든 image 처리를 할때 좌표축 때문에 머리가 아파오는 경우가 꼭 생긴다. 바로 일반적인 좌표계인 x,y 기준으로 위치를 잡을지, image도 array의 일종이니 row, col 기준으로 위치를 잡을지 생각해야 하는 시점이다. 사실 정말 단순한 문제인데 의외로 헷갈리고 각도라도 계산해야 하는 시점이 생기면 지옥이 펼쳐진다. 이 글은 매번 image 처리 파트를 할 때마다 좌표축을 헷갈리는 멍청한 본인을 한번에 이해시키기 위해서 쓰는 글이다.
Rule #1
Matlab, Python, opencv, 캡쳐 프로그램, 지금까지 써본 모든 이미지 관련 프로그램들은 전부 이미지를 세 가지 형태중 하나의 형태로 사용한다. 그 이외의 형태는 아직까지 한번도 본적이 없다. 정확하게 말하자면 데이터 자체는 좌측과 같이 가지고 있고(실제 메모리에서의 구조보다는 indexing 기준), 사용자와 interaction을 해야하는 경우, 즉 마우스로 클릭을 하거나, line을 plot 하거나, figure의 현재 위치를 알려주거나 하는 경우는 중간이나 우측의 형태로 표기한다.
좌표축이 헷갈리는 가장 큰 원인은 개인적으로 데이터 입출력 형태가 두 가지가 있기 때문이라고 생각한다. indexing은 좌측, 입출력은 무조건 중간과 우측 중 하나의 형태만 취하면 그나마 혼동의 여지가 없겠으나, 입출력 형태가 2개가 있어서 혼란이 시작된다. 게다가 중간의 형태는 좌측의 형태와 정확히 일치하고 두 좌표값만 서로 바꾼 형태라 자칫 잘못하면 indexing을 method 1 방식으로 하게 되거나, method 1 방식으로 선을 그어주어야 하는데 indexing 하듯이 값을 넣을 수 있다.
가능한 모든 상황에서 테스트 해보면서 언제 어떤 식으로 좌표축이 표시되는지 확인해서 아래 정리해보았다.
사용하는 좌표축 형태 정리
Matlab R2020a | Python 3.7.3 (matplotlib=3.1.0) |
|
Indexing | indexing | indexing |
Method 1 (reversed Y axis) | imshow, imagesc | imshow figure, object position |
Method 2 (normal axis) | figure, object position plot, scatter 등 일반적인 graphic |
plot, scatter 등 일반적인 graphic |
현재 Method를 따름 | ginput, drawline | ginput |
Indexing
모든 경우에서 indexing을 하는 경우는 일반적인 array의 row, col 방식을 따르기에 가장 단순하다.
예를 들어 가장 최상단 좌측 픽셀을 검은색으로 만들고 싶으면 Matlab과 Python 각각 아래와 같이 입력하면 된다.
img(1,1,:) = 0 % Matlab
img[0,0,:] = 0 # Python
Position Input
Matlab과 Python 모두 axis 상에서 마우스로 위치를 찍는 경우는 직관적으로 현재 axis의 상태를 그대로 따라 값을 저장해준다. 예를들어 imshow로 그림을 그려둔 상태에서 ginput을 실행하면 reversed Y axis 상태로 값을 기록한다. 반대로 plot 함수로 일반적인 cartesian 좌표계 상태라면 ginput 함수는 normal axis 상태로 값을 기록한다. 그러나 둘다 x, y 기준이지 row,col 기준이 아님을 기억하자.
Object Position(중요)
같은 기능에 대해서 여기서 Matlab과 Python, 그리고 다른 프로그램의 행동이 나뉘는 것 같다.
Python은 FigureManager의 geometry 속성 조절을 통해 window의 위치를 조정할 때 여타 image 처리에 사용되는 axis와 똑같이 reversed Y axis의 Method 1번 방식을 사용하는 반면, Matlab의 경우 Method 2 방식으로 figure window 의 position을 설정할 때 좌측 하단 구석이 원점이 된다.
GUI 개발을 할 때도 똑같은 형식으로 작동을 하는데, Matlab의 appdesigner를 사용하거나 ui가 붙는 object(button 등)를 만드는 경우 좌측 하단이 원점이 되는 Method 2 방식을 쓴다. Python으로는 GUI 개발을 해보지 않아서 확실히는 모르나 급히 PyQt5 관련 문서를 찾아보니 좌측 상단이 원점이 되는 Method 1 방식을 쓰는 것으로 보아 두 프로그램 모두 window position을 표기하는 방식과 동일하게 가는 것 같다.
결론
결론적으로 이미지 데이터 입/출력은 무조건 Method 1 방법, Position과 관련된 경우는 사용 언어에 따라 체크를 하고 넘어가는 식으로 규칙을 생각해두는 것이 좋다. 위치 데이터를 저장할 때는 나중에 저장한 위치를 다시 표시할 것을 대비해서 Method 1의 방법으로 저장하는 것이 가장 편하지만 저장한 위치로 image array를 자르거나 하는 복잡한 작업을 할 때 일이 더 복잡해질 수 있다. 본인은 그래서 무조건 데이터 저장은 row, col 기준으로 저장을 하고 필요한 경우에만 x,y로 입출력을 하려고 한다.
나중에 추가할 내용
flipud 한 뒤 set('YDir', 'normal')
'취미 > Programming' 카테고리의 다른 글
opencv SimpleBlobDetector, blob size 정리 (0) | 2021.09.08 |
---|---|
Ubuntu TensorFlow(2.6) GPU 설치 (0) | 2021.09.06 |
Ubuntu setup (Linux setup) (0) | 2021.06.11 |
[Vim] Linux 상에서의 Not an editor command: ^M 문제 (0) | 2021.03.24 |
Python(anaconda) Vim intagration (2) | 2020.10.28 |