카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/29

화면 캡처후 이미지 text 처리

1. 이미지 추출
umplayer 사용
s 화면 캡처

1.1 캡처된 이미지 파일 애니매니션으로 병합.
-delay 옵션으로 화면 속도를 조정한다.

convert -delay 2 -loop 0 *.png animated.gif

1.2 영상 형식으로 병합
ffmpeg -framerate 1/2 -i shot%04d.png -c:v libx264 -r 30 out.mp4

-framerate 1/2: 프레임 속도를 1/2 FPS 또는 프레임 당 2 초로 설정
-i shot%04d.png: 파일이름 호출. shot0000.png ~ shot9999.png
-c:v libx264: libx264 비디오 코텍 사용.
              -crf <number>: 품질 설정. 0 ~ 51
                                                                 23 : 기본
                                                                   0 : 무손실 인코딩이며 매우 높은 대역폭.
                                                                 18 : 시각적 손실 확인 불가능.
-r 30: 출력 프레임 지정
out.mp4: 출력 파일 이름

1.2 캡처된 화면 나열 후 백그라운드 이미지 처리
tesseract-ocr
pdf 일때
 convert -density 300 foo.png -depth 8 -strip -background white -alpha off out.tiff

원본 파일의 레이어가 문제인지 배경이 변경 안됨.
 convert foo.png -transparent -background white -alpha off out.tiff
 convert foo.png -transparent white -alpha off out.tiff
 convert foo.png -background white -flatten -alpha off out.jpg

아래 명령으로 배경 처리.
 gm convert -threshold 50% 'foo.png' 'out.tiff'
 for i in *.png; do gm convert -threshold 50% "$i" "$i.tiff"; done

txt 파일 변경
 tesseract out.tiff out

영문이 있을 경우
 tesseract out.tiff -l eng text
 for i in *.tiff; do tesseract "$i" -l eng "$i.text"; done

한글이 있을 경우
 tesseract out.tiff -l kor text

2. 텍스트 번역
 for i in *.txt ; do trans -e bing file://`pwd`/"$i" > "$i.ko.txt"; done
 for i in *.txt ; do trans -e bing file://"`pwd`"/"$i" > "$i.ko.txt"; done

2.1 번역파일 병합
for i in *.ko.txt; do cat "$i" >> all_merge.txt; done

2.2 번역 파일 수정
2.3 text 파일 애니메니션 생성
txt 확장자를 gif 또는 png 변경
convert -delay 2 -loop 0 *.png animated.gif

2.4 text 파일 영상 형식 생성
txt 확장자를 gif 또는 png 변경
ffmpeg -framerate 1/2 -i shot%04d.png -c:v libx264 -r 30 out.mp4

3 음성 듣기

3.1 단어
 simple_google_tts en Accessing

3.2 파일
 simple_google_tts ko `pwd`/file.txt

4 음성녹음
4.1 단어 녹음
 tts-cli "Hello" -l 'en' -o hello.mp3

4.2 파일 녹음
  gtts-cli -f hello.txt -l 'en' -o hello.mp3

4.3 전체 텍스트 파일 mp3 만들기
for i in *.ko.txt ; do gtts-cli -f "$i" -l 'ko' -o  "$i.ko.mp3" ; done && for en in *.txt ; do gtts-cli -f "$en" -l 'en' -o  "$en.mp3" ; done

asm 서브루틴

section .bss
digitSpace resb 100
digitSpacePos resb 8

section .text
global _start

_start:
mov rax, 123
call _printRAX

mov rax, 60
mov rdi, 0
syscall

_printRAX:
mov rcx, digitSpace
mov rbx, 10
mov [rcx], rbx
inc rcx
mov [digitSpacePos], rcx

_printRAXLoop:
mov rdx, 0
mov rbx, 10
div rbx
push rax
add rdx, 48

mov rcx, [digitSpacePos]
mov [rcx], dl
inc rcx
mov [digitSpacePos], rcx

pop rax
cmp rax, 0
jne _printRAXLoop

_printRAXLoop2:
mov rcx, [digitSpacePos]

mov rax, 1
mov rdi, 1
mov rsi, rcx
mov rdx, 1
syscall

mov rcx, [digitSpacePos]
dec rcx
mov [digitSpacePos], rcx

cmp rcx, digitSpace
jge _printRAXLoop2

ret

compile:
nasm -f elf64 test.asm -o test.o
ld test.o -o test

vi test.asm
_start:
mov rax, 변경한다. 1339
call _printRAX

compile:
nasm -f elf64 test.asm -o test.o
ld test.o -o test

리눅스 어셈블리의 nasm x86_64 매크로

리눅스 어셈블리의 nasm x86_64 매크로

1. 매크로란?

매크로는 특정 작업을 수행 하기 위해 미리 정의된 명령어 모음에 대한 확장 되는 단일 명령어.

exit:
 mov rax, 60
 mov rdi, 0
 syscall

2. 매크로 정의
<name>
  매크로 이름.
<argc>
  매크로 동작 인수의 갯수.
<macro body>
매크로 정의.

%macro <name> <argc>
...
<macro body>
...
%endmacro

"Exit" Macro

%macro exit 0 ; 0은 argc 인수의 개수
mov rax, 60
mov rdi, 0
syscall
%endmacro

3. 매크로 인수
<argc> 매크로에 사용하는 인수의 개수이다. 인수는 매크로로 전달 될 수 있다.

매크로 본문 내에서 이러한 입력은 첫 번째 입력에 대해 '%1', 즉 두 번째 입력에 대해 '%2'를 사용 하여 참조 된댜.

%macro <name> <argc>
...
<macro body>
...
%endmacro

"printDigit" 매크로의 경우 argc는 1이다.

"exit" 매크로의 경우 argc는 인수가 없기 때문에 0이다.

_start 아래의 코드에서 "printdigit"를 사용 하면 첫 번째 인수 뒤에 숫자를 지정.

현재 사용 하는 "exit" 인수가 0이기 때문에 숫자를 지정 하지 않는다.

%macro exit 0
mov rax, 60
mov rdi, 0
syscall
%endmacro

%macro printDigit 1
mov rax, %1
call _printRAXDigit
%endmacro

_start:
printDigit 3
printDigit 4

exit

This code will print "3" then "4"
http://pastebin.com/5K3CARnw

args > 1 인 경우, 입력 구분자로 쉼표 사용.

%macro printDigitSum 2
mov rax, %1
add rax, %2
call _printRAXDigit
$endmacro

_start:
printDigitSum 3,2
exit

이 코드는 "5" 출력.

4. 매크로 로컬 레이블
매크로는 미리 정의된 코드로 컴파일 할 때 확장 된다.
해당 코드에 레이블이 포함 된 경우 매크로가 두 번 이상 사용되면 중복된 레이블 오류가 발생할 수 있다.

%macro freeze 0
_loop:
jmp _loop
%endmacro

_start:
freeze
freeze
exit

;Redefined Symbol Error
_loop:
jmp _loop

_loop:
jmp _loop
exit


이 문제는 매크로 내에서 레이블 이름 앞에 "%%"를 사용 하여 해결할 수 있다.
이렇게 하면 레이블 확장시 사용할 수 있다.

%macro freeze 0 ---> %macro freeze 0
_loop: ---> %%loop:
jmp _loop ---> jmp %%loop
%endmacro ---> %endmacro


5. EQU 값 정의
EQU는 나중에 사용할 상수를 정의 하는데 사용.

section .data
test db "Hello, World!",10

section .text
global _start

_start:
mov rax, 1
mov rdi, 1
mov rsi, text
mov rdx, 14
syscall

mov rax, 60
mov rdi, 0
syscall

STDIN equ 0
STDOUT equ 1
STDERR equ 2

SYS_READ equ 0
SYS_WRITE equ 1
SYS_EXIT equ 60

section .data
text db "Hello, World!",10

section .text
global _start

_start:
mov rax, SYS_WRITE
mov rdi, STDOUT
mov rsi, text
mov rdx, 14
syscall

mov rax, SYS_EXIT
mov rdi, 0
syscall

6. 외부 파일 포함
단일 어셈블리 프로그램은 "include"를 사용하여 여러 파일로 나눌 수 있다.

"include"는 외부 파일의 코드를 로드하여 포함 된 위치에 추가한다.

매크로와 EQU 정의는 포함(include)된 파일 내부에 있다.
%include "filename.asm"

"Hello, World!" 코드는 'linux64.inc' 파일에 이미 정의되어 있는 'print' 및 'exit' 매크로를 통해 동작 한다.
%include "linux64.inc"

section .data
text db "Hello, World!",10,0

section .text
global _start

_start:
print text
exit

"linux64.inc"
http://pastebin.com/N1ZdmhLw

화면캡처, 마우스 좌표, gif 애니매니션.

1. 우분투 화면 캡처 사용법.

1.1 기본 제공 화면 캡처
폴더 저장
Print Screen(PrtSc): 전체화면 사진 폴더 저장
Alt + Print Screen : 활성화 창 지정 후, 사진 폴더 저장.

클립 보드 저장
Shift + Ctrl + Print Screen
Ctrl + v

영영 선택 지정
Shift + Print Screen : 사진 폴더 저장.

영상 녹화
Shift + Ctrl + Alt + R : 녹화 시작
Shift + Ctrl + Alt + R : 녹화 정지.
비디오 폴더 저장

1.2 그놈 스크린 샷 사용
효과:
마우스 포인터 포함 체크 스크린 샷

1.3 Shutter
편집 활성화
패키지 설치
https://launchpad.net/ubuntu/+archive/primary/+files/libgoocanvas-common_1.0.0-1_all.deb
https://launchpad.net/ubuntu/+archive/primary/+files/libgoocanvas3_1.0.0-1_amd64.deb
https://launchpad.net/ubuntu/+archive/primary/+files/libgoo-canvas-perl_0.06-2ubuntu3_amd64.deb

프로그램 종료
sudo killall -9 shutter

캡처된 이미지 편집 가능. s

2. 비잔즈(Byzanz)
CLI 방식
파일 지원 형식: GIF(애니메이션 기본), FLV, OGG, OGV, WEBM

녹화 시간 설정 CLI
byzanz-record -d DURATION --delay=DELAY -x X-COORDINATE -y Y-COORDINATE -w WIDTH -h HEIGHT FILENAME
byzanz-record -d 10 --delay=5 -x 0 -y 0 -w 1440 -h 900 desktop-animation.gif

참고 : -v 플래그를 추가 하여 진행 상황 확인

byzanz-record -v --exec="uname -a" output.flv

2.1 스크립트 테스트
#!/bin/bash

# 의존: 
sudo add-apt-repository ppa:fossfreedom/byzanz;
sudo apt-get update && sudo apt-get install byzanz zenity zenity-common notify-osd)

# 시간 및 날짜
TIME=$(date +"%Y-%m-%d_%H%M%S")

# 시작하기 전 지연
DELAY=10

# 저장 폴더
FOLDER="$HOME/Pictures"

# 기본 녹음 시간
DEFDUR=10

# 녹음 시작시 알려주는 소리
beep() {
    paplay /usr/share/sounds/freedesktop/stereo/message-new-instant.oga &
}

# 지정 녹화 시간 설정
USERDUR=$(gdialog --title "지속?" --inputbox "초 단위 입력" 200 100 2>&1)

# 출력 파일
if [ $USERDUR -gt 0 ]; then
    D=$USERDUR
else
    D=$DEFDUR
fi

# 윈도우 창 정보 ---> 나중 이부분 업데이트 해야 함. 18.04 wayland
XWININFO=$(xwininfo)
read X < <(awk -F: '/Absolute upper-left X/{print $2}' <<< "$XWININFO")
read Y < <(awk -F: '/Absolute upper-left Y/{print $2}' <<< "$XWININFO")
read W < <(awk -F: '/Width/{print $2}' <<< "$XWININFO")
read H < <(awk -F: '/Height/{print $2}' <<< "$XWININFO")

# 녹화 시간 사용자 정보
notify-send "GIFRecorder" "Recording duration set to $D seconds. Recording will start in $DELAY seconds."

# 실 녹화
sleep $DELAY
beep
byzanz-record -c --verbose --delay=0 --duration=$D --x=$X --y=$Y --width=$W --height=$H "$FOLDER/GIFrecord_$TIME.gif"
beep

# 녹음 종료 사용자 메시지 전달.
notify-send "GIFRecorder" "Screencast saved to $FOLDER/GIFrecord_$TIME.gif"

3. 마우스 좌표 인식
xrectsel
project site: https://github.com/lolilolicon/xrectsel

libX11 기반에서 빌드. wayland 마우스 테스트
./bootstrap  # required if ./configure is not present
./configure --prefix /usr
make
make DESTDIR="$directory" install

4. peek
애니매니션 GIF 이미지 만들기.
프로젝트 사이트 : https://github.com/phw/peek
sudo add-apt-repository ppa:peek-developers/stable
sudo apt update
sudo apt install peek

youtube-dl 최신 버전 설치

sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl