Skip to content

seukseok/jihwa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

44 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ–ผ๏ธ ์ง€ํ™”: ๋กœ์ปฌ AI ๊ธฐ๋ฐ˜ ์ž๋™ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ „์ž์ž‰ํฌ ์•ก์ž

์ง€ํ™”์€ ๋กœ์ปฌ์— ๋‚ด์žฅ๋œ ์ดˆ๊ฒฝ๋Ÿ‰ AI ๋ชจ๋ธ์„ ํ†ตํ•ด ๋งค์ผ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ ,
์ „๊ธฐ๋ฅผ ๊ฑฐ์˜ ์“ฐ์ง€ ์•Š๋Š” ์ „์ž์ž‰ํฌ ๋””์Šคํ”Œ๋ ˆ์ด์— ์ž๋™์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ์Šค๋งˆํŠธ ์•„ํŠธ ํ”„๋ ˆ์ž„ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

์ด ์ €์žฅ์†Œ๋Š” Raspberry Pi ํ™˜๊ฒฝ์—์„œ Stable Diffusion Turbo(OnnxStream ๊ธฐ๋ฐ˜)๋ฅผ ์‚ฌ์šฉํ•ด
์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ACeP e-ink ๋””์Šคํ”Œ๋ ˆ์ด์— ์ถœ๋ ฅํ•˜๋Š” ์ „์ฒด ๋ฐ๋ชจ ํ”„๋กœ์„ธ์Šค๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  • โœ… ์˜คํ”„๋ผ์ธ ๋กœ์ปฌ AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ (Stable Diffusion XL Turbo, Onnx ์–‘์žํ™”)
  • โœ… e-ink ๊ธฐ๋ฐ˜ ์ปฌ๋Ÿฌ ๋””์Šคํ”Œ๋ ˆ์ด ์ž๋™ ํ‘œ์‹œ
  • โœ… ํ”„๋กฌํ”„ํŠธ ๋žœ๋ค ์กฐํ•ฉ ์ง€์› ๋ฐ ์‚ฌ์šฉ์ž ์ปค์Šคํ„ฐ๋งˆ์ด์ง•
  • โœ… cron, shell ๊ธฐ๋ฐ˜ ์ž๋™ ์ƒ์„ฑ/์ถœ๋ ฅ ์Šค์ผ€์ค„๋ง ๊ฐ€๋Šฅ
  • โœ… ์ดˆ์ €์ „๋ ฅ ๊ตฌ์„ฑ (์ €์ „๋ ฅ SOC + e-ink ์œ ์ง€ ์ „๋ ฅ)

1. OS ์„ค์น˜(Pi imager ์‚ฌ์šฉ)

  • Raspbian Bullseye Lite 64bit. image

  • user: jion.

  • password: 1234.

์ปดํŒŒ์ผ์„ ์œ„ํ•œ ์Šค์™‘ํŒŒ์ผ ํฌ๊ธฐ ์ฆ๊ฐ€

/etc/dphys-swapfile ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๊ณ (sudo vim /etc/dphys-swapfile ๋“ฑ์œผ๋กœ) CONF_SWAPSIZE ๊ฐ’์„ 1024๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”.

์Šค์™‘ํŒŒ์ผ์€ ๋นŒ๋“œ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ธฐ๋ณธ ์„ค์ •(256MB)์—์„œ๋Š” OnnxStream ๋ชจ๋ธ์„ ๋นŒ๋“œํ•  ๋•Œ ์ค‘๋‹จ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ
์ตœ์†Œ 1024MB ์ด์ƒ์œผ๋กœ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๊ธ€

E-paper ์ธํ„ฐํŽ˜์ด์Šค ํ™œ์„ฑํ™”

sudo raspi-config
Choose Interfacing Options -> SPI -> Yes Enable SPI interface
sudo reboot

ํ•„์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ ์„ค์น˜

๋จผ์ € ์•„๋ž˜ ๋ช…๋ น์œผ๋กœ ์ด ์ €์žฅ์†Œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์„ธ์š”:

sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt install git
git clone https://github.com/mseokq23/jihwa.git

๊ทธ๋Ÿฐ ๋‹ค์Œ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”:

cd jihwa
chmod +x scripts/install.sh
scripts/install.sh

scripts/install.sh๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€, ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ OnnxStream(Stable Diffusion)์„ ์„ค์น˜ํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์ฒด ๋นŒ๋“œ ๊ณผ์ •์€ ์ƒ๋‹นํžˆ ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค(6 ์‹œ๊ฐ„ ์†Œ์š”).

2. ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋ฐ ํ‘œ์‹œ

2-1. ์ด๋ฏธ์ง€ ์ƒ์„ฑ

cd jihwa   # ๋ชจ๋“  ๋ช…๋ น์–ด๋Š” jihwa์—์„œ๋งŒ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

python3 src/generate_picture.py image_dir => ์ด๋ฏธ์ง€ ์ƒ์„ฑ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

์ด ๋ช…๋ น์€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ ์œ  ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ƒˆ ์ด๋ฏธ์ง€์™€ ํ‘œ์‹œํ•˜๊ธฐ ์‰ฝ๊ฒŒ 'output.png'๋ผ๋Š” ์ด๋ฆ„์˜ ๋ณต์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

2-2. ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋ช…๋ น์ค„ ์˜ต์…˜ (Command-line options)

์•„๋ž˜๋Š” python3 src/generate_picture.py์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด ์˜ต์…˜(์ปค๋งจ๋“œ๋ผ์ธ ์ธ์ž)์ž…๋‹ˆ๋‹ค.

2-3. generate_picture.py ๋ช…๋ น์–ด ์˜ต์…˜

์˜ˆ์‹œ

python3 src/generate_picture.py --[์„ ํƒ์ธ์ž1] --[์„ ํƒ์ธ์ž2] --[์„ ํƒ์ธ์ž3] [ํ•„์ˆ˜์ธ์ž]

ํ•„์ˆ˜ ์ธ์ž

์ธ์ž ์„ค๋ช…
output_dir ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ (ํ•„์ˆ˜, ์œ„์น˜ ์ธ์ž)

์„ ํƒ ์ธ์ž

์˜ต์…˜ ์„ค๋ช…
--prompts ์‚ฌ์šฉํ•  ํ”„๋กฌํ”„ํŠธ ํŒŒ์ผ (๊ธฐ๋ณธ๊ฐ’: prompts/flowers.json)
--prompt ์ง์ ‘ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž…๋ ฅ (์ž…๋ ฅ ์‹œ ํ”„๋กฌํ”„ํŠธ ํŒŒ์ผ ๋Œ€์‹  ์‚ฌ์šฉ)
--seed ์ด๋ฏธ์ง€ ์ƒ์„ฑ์„ ์œ„ํ•œ ์‹œ๋“œ ๊ฐ’ (๊ธฐ๋ณธ๊ฐ’: 1~10000 ์ค‘ ๋ฌด์ž‘์œ„)
--steps ์ถ”๋ก  ์Šคํ… ์ˆ˜ (๊ธฐ๋ณธ๊ฐ’: 3)
--width ์ƒ์„ฑ ์ด๋ฏธ์ง€์˜ ๋„ˆ๋น„ (๊ธฐ๋ณธ๊ฐ’: 480)
--height ์ƒ์„ฑ ์ด๋ฏธ์ง€์˜ ๋†’์ด (๊ธฐ๋ณธ๊ฐ’: 800)
--sd Stable Diffusion ์‹คํ–‰ ํŒŒ์ผ ๊ฒฝ๋กœ (๊ธฐ๋ณธ๊ฐ’: OnnxStream/src/build/sd)
--model ์‚ฌ์šฉํ•  Stable Diffusion ๋ชจ๋ธ ๊ฒฝ๋กœ (๊ธฐ๋ณธ๊ฐ’: models/stable-diffusion-xl-turbo-1.0-anyshape-onnxstream) => ์‚ฌ์šฉํ•  ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ์ด๊ฑธ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋จ.

|(ํ˜„์žฌ FP32 Aritmetic์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ์— FP16 aritmetic์œผ๋กœ ๋ณ€๊ฒฝ๋„ ๊ณ ๋ คํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.)


์ด๋ฏธ์ง€ ํ‘œ์‹œ(์ถœ๋ ฅ)

cd jihwa   # ๋ชจ๋“  ๋ช…๋ น์–ด๋Š” jihwa์—์„œ๋งŒ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

python3 src/display_picture.py image_dir/output.png => ์ด๋ฏธ์ง€ ์ƒ์„ฑ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

| ์ด๋ฏธ์ง€ ๋ช…์ด output.png์ด ์•„๋‹Œ bunch_of_marigolds_in_cubism_style_seed_6651_steps_3.png ๋˜๋Š” output %d์™€ ๊ฐ™์„ ์ˆ˜ ์žˆ๊ธฐ์— ์ž˜ ํ™•์ธํ•˜๊ณ  ํ•˜์…”์•ผํ•ฉ๋‹ˆ๋‹ค.

๋” ๋งŽ์€ ์˜ต์…˜์„ ๋ณด๋ ค๋ฉด -h ๋˜๋Š” --help ํ”Œ๋ž˜๊ทธ ์“ฐ์„ธ์š”.

์ด๋ฏธ์ง€ ์ถœ๋ ฅ ๋ช…๋ น์ค„ ์˜ต์…˜ (Command-line options)

์•„๋ž˜ ์˜ต์…˜๋“ค์€ src/display_picture.py ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์ž…๋‹ˆ๋‹ค.

์˜ต์…˜ ์กฐํ•ฉ์— ๋”ฐ๋ผ

  • ์‹ค์ œ ๋””์Šคํ”Œ๋ ˆ์ด๋กœ ์ „์†ก
  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜(ํŒŒ์ผ ์ €์žฅ๋งŒ)
  • ํฌ๋กญ/๋ฆฌ์‚ฌ์ด์ฆˆ ๋ฐฉ์‹
  • ํ™”๋ฉด ๋ฐฉํ–ฅ
  • ๋””์Šคํ”Œ๋ ˆ์ด ์ข…๋ฅ˜ ๋“ฑ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์˜ต์…˜์„ ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

1. ์ด๋ฏธ์ง€ ์ถœ๋ ฅ ์˜ต์…˜

์˜ต์…˜ ์„ค๋ช…
image (ํ•„์ˆ˜) ์ฒ˜๋ฆฌํ•  ์ž…๋ ฅ ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ
-o, --output ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  ๊ฒฝ๋กœ (์„ ํƒ)
-p, --portrait ์„ธ๋กœ ๋ชจ๋“œ๋กœ ์ถœ๋ ฅ (๊ฐ€๋กœ/์„ธ๋กœ ์ „ํ™˜)
-c, --centre_crop ์ง€๋Šฅ์  ํฌ๋กญ ๋Œ€์‹  ์ค‘์•™ ํฌ๋กญ ์‚ฌ์šฉ
-r, --resize_only ํฌ๋กญ ์—†์ด ๋‹จ์ˆœ ๋ฆฌ์‚ฌ์ด์ฆˆ๋งŒ ์ˆ˜ํ–‰
-s, --simulate_display ์‹ค์ œ e-Paper ๋””์Šคํ”Œ๋ ˆ์ด ์—†์ด ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ชจ๋“œ(์ถœ๋ ฅ X)
--width ๋””์Šคํ”Œ๋ ˆ์ด ๋„ˆ๋น„ ์ง€์ • (๊ธฐ๋ณธ๊ฐ’: 480)
--height ๋””์Šคํ”Œ๋ ˆ์ด ๋†’์ด ์ง€์ • (๊ธฐ๋ณธ๊ฐ’: 800)
--epd ์‚ฌ์šฉํ•  Waveshare EPD ๋ชจ๋“ˆ ํƒ€์ž… ์ง€์ • (์˜ˆ: epd7in3f)
--debug ๋””๋ฒ„๊ทธ ๋กœ๊น… ํ™œ์„ฑํ™”

์˜ˆ์‹œ

# python3 src/display_picture.py [์ด๋ฏธ์ง€ํŒŒ์ผ] [์˜ต์…˜๋“ค]

python3 src/display_picture.py example.jpg --epd epd7in3f
python3 src/display_picture.py example.jpg -p -o output.jpg
python3 src/display_picture.py example.jpg --simulate_display

2. ์ฃผ์š” ๊ธฐ๋Šฅ๋ณ„ ๋™์ž‘

์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•ด์„œ Waveshare e-ink ๋””์Šคํ”Œ๋ ˆ์ด๋กœ ์ถœ๋ ฅ : โ†’ ์˜ต์…˜์— --simulate_display๋ฅผ ์ฃผ์ง€ ์•Š์œผ๋ฉด display_waveshare ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด ์ด๋ฏธ์ง€๋ฅผ ์‹ค์ œ ๋””์Šคํ”Œ๋ ˆ์ด์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ชจ๋“œ (๋””์Šคํ”Œ๋ ˆ์ด ์ถœ๋ ฅ X): โ†’ -s ๋˜๋Š” --simulate_display ์˜ต์…˜ ์‚ฌ์šฉ ์‹œ ์‹ค์ œ ๋””์Šคํ”Œ๋ ˆ์ด ์—ฐ๊ฒฐ ์—†์ด ์ฝ”๋“œ ์‹คํ–‰(์ด๋ฏธ์ง€ ์ €์žฅ ๋“ฑ๋งŒ ์ˆ˜ํ–‰).

๋””์Šคํ”Œ๋ ˆ์ด ๋ฐฉํ–ฅ ์ „ํ™˜(์„ธ๋กœ/๊ฐ€๋กœ): โ†’ -p ๋˜๋Š” --portrait ์˜ต์…˜ ์‚ฌ์šฉ ์‹œ ์„ธ๋กœ ๋ชจ๋“œ๋กœ ์ถœ๋ ฅ.

์ง€๋Šฅ์  ํฌ๋กญ/๋‹จ์ˆœ ์ค‘์•™ ํฌ๋กญ/๋ฆฌ์‚ฌ์ด์ฆˆ๋งŒ: โ†’ -c (--centre_crop): ์ค‘์•™ ํฌ๋กญ โ†’ -r (--resize_only): ๋ฆฌ์‚ฌ์ด์ฆˆ๋งŒ โ†’ ์˜ต์…˜ ๋ฏธ์‚ฌ์šฉ ์‹œ ์ง€๋Šฅ์  ํฌ๋กญ(ํ˜„์ €๋„ ๊ธฐ๋ฐ˜) => ์ง€๋Šฅ์  ํฌ๋กญ์ด ํ›จ์”ฌ ์ข‹์Œ

๋””์Šคํ”Œ๋ ˆ์ด ์ข…๋ฅ˜ ์„ ํƒ: โ†’ --epd epd7in3f ํ˜•ํƒœ๋กœ ๋””์Šคํ”Œ๋ ˆ์ด ์ข…๋ฅ˜ ์ง€์ • ๊ฐ€๋Šฅ.

๊ฐ€๋กœ๋กœ ๋””์Šคํ”Œ๋ ˆ์ด

๊ฐ€๋กœ๋กœ ๋ฐฉํ–ฅ ๋””์Šคํ”Œ๋ ˆ์ด์— ์„ธ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด generate_picture.py์˜ ๋„ˆ๋น„์™€ ๋†’์ด ๊ฐ’์„ ๋ฐ”๊พธ๊ณ  display_picture.py ์Šคํฌ๋ฆฝํŠธ์— -p๋ฅผ ํฌํ•จํ•˜์„ธ์š”.

์•„๋ž˜๋Š” ์„ธ๋กœ๊ฐ€ ์•„๋‹Œ ๊ฐ€๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ์˜ˆ์‹œ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. python src/generate_picture.py --width=800 --height=480 image_dir

python src/display_picture.py -c -p image_dir/output.png ์œ„์™€ ๊ฐ™์ด ์ž…๋ ฅํ•˜๋ฉด ์„ธ๋กœ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


์ž๋™ํ™”(crontabํ•˜๊ณ  shellscript ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผํ•จ.)

๋งค์ผ ๊ฐ™์€ ์‹œ๊ฐ„์— ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ž๋™์œผ๋กœ ํ‘œ์‹œํ•˜๋ ค๋ฉด crontab์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์•„๋ž˜ cron_auto ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  chmod +x๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“  ํ›„,
crontab์— ๋“ฑ๋กํ•˜๋ฉด ์‹œ์Šคํ…œ์ด ์ž์ •๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

ํŒ: ์—ฌ๋ฆ„์ฒ  ๊ณ ์˜จ ํ™˜๊ฒฝ์—์„œ๋Š” ๋””์Šคํ”Œ๋ ˆ์ด๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๋ณ€์ƒ‰๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ
์ด๋ฏธ์ง€ ์ƒ์„ฑ๊ณผ ๋””์Šคํ”Œ๋ ˆ์ด ์—…๋ฐ์ดํŠธ ์‚ฌ์ด์— sleep 30 ๊ฐ™์€ ์ง€์—ฐ์„ ๋„ฃ๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”.

#!/bin/bash
cd "/home/jihwa"
python jihwa/src/generate_picture.py --width 480 --height 800 image_dir
python jihwa/src/display_picture.py -r image_dir/output.png

๋‹น์—ฐํžˆ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝํ•˜์„ธ์š”.

๊ทธ๋Ÿฐ ๋‹ค์Œ crontab์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค(crontab -e๋กœ crontab ํŒŒ์ผ ํŽธ์ง‘): 0 0 * * * /home/jihwa/bin/cron_auto ์ด ๋ช…๋ น์€ ๋งค์ผ ์ž์ •์— cron_auto๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

e-paper ๋””์Šคํ”Œ๋ ˆ์ด๋Š” ์˜จ๋„์— ๋ฏผ๊ฐํ•˜๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด ์ œ๋กœ์˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์žฅ์‹œ๊ฐ„ ๋œจ๊ฑฐ์›Œ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ๋””์Šคํ”Œ๋ ˆ์ด์— ๋ณ€์ƒ‰์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด๋ฏธ์ง€ ์ƒ์„ฑ ํ›„ ๋””์Šคํ”Œ๋ ˆ์ด ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์—ฐ์‹œ์ผœ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กฌํ”„ํŠธ

prompts/ ๋””๋ ‰ํ† ๋ฆฌ์˜ .json ํŒŒ์ผ์€ ๋‹ค์ฐจ์› ๋ฐฐ์—ด ํ˜•์‹์˜ "ํ”„๋กฌํ”„ํŠธ ์กฐํ•ฉ ์กฐ๊ฐ๋“ค"๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด [[ "sunset", "dawn" ], [ "over mountains", "by the sea" ]] ์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ,
๊ฐ ๋ฐฐ์—ด์—์„œ ํ•˜๋‚˜์”ฉ ๋ฌด์ž‘์œ„๋กœ ์„ ํƒ๋˜์–ด "sunset over mountains" ์™€ ๊ฐ™์€ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

  • --prompt: ์ง์ ‘ ๋‹จ์ผ ํ”„๋กฌํ”„ํŠธ ๋ฌธ์ž์—ด ์ง€์ •
  • --prompts prompts/default.json: ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋žœ๋ค ์กฐํ•ฉ ์‚ฌ์šฉ

์ €์žฅ์†Œ(๊ณ ์œ ์ด๋ฆ„ ์ €์žฅ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์„œ ๊ทธ๋ฆผ 1,2,3,4๋กœ ๋‚˜์˜ค๋„๋ก ํ•ด์•ผํ•˜๊ณ  50๊ฐœ ์ดˆ๊ณผ์˜ ๊ทธ๋ฆผ์ด ์žˆ์„ ๊ฒฝ์šฐ 51์€ 1์œผ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ)(์ˆ˜์ •์ค‘)

์ด๋ฏธ์ง€๋ฅผ ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ์”ฉ ์ €์žฅํ•ด๋„ 2๋…„ ๋„˜๊ฒŒ 1GB ๋ฏธ๋งŒ์˜ ๊ณต๊ฐ„๋งŒ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋ฏธ์ง€๊ฐ€ ๋งค๋ฒˆ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ๊ณ ์œ  ์ด๋ฆ„ ์ €์žฅ ๊ธฐ๋Šฅ์€ ๋น„ํ™œ์„ฑํ™”ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

# image_dir/uuid.png โ†’ ๋ฎ์–ด์“ฐ๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ
fullpath = os.path.join(image_dir, "output.png")

์ด๋ฏธ์ง€ํŒŒ์ผ ๋ฐฑ์—…๋ณธ ๋งŒ๋“œ๋Š”๋ฒ•

๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋œ SD์นด๋“œ๋ฅผ img๋กœ ๋งŒ๋“ค์–ด์„œ ๋‹ค๋ฅธ SD ์นด๋“œ ๊ทธ๋Œ€๋กœ ๋„ฃ๊ณ ์ž ํ•˜๋ฉด ๊ธฐ์กด SD ์นด๋“œ์˜ ๋นˆ๊ณต๊ฐ„๊นŒ์ง€ imgํŒŒ์ผ์˜ ์šฉ๋Ÿ‰์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ ์šฉ๋Ÿ‰(24GB)๊ฐ€ ์•„๋‹Œ 64GB(๊ฐœ๋ฐœ์ค‘์ธ SD์นด๋“œ์˜ ์ตœ๋Œ€์šฉ๋Ÿ‰)์œผ๋กœ img ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง€ ๋•Œ๋ฌธ์—, ๋” ์ ์€ ์šฉ๋Ÿ‰์˜ SD์นด๋“œ์— ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณต์ œํ•œ imgํŒŒ์ผ์˜ ์šฉ๋Ÿ‰์„ ์ค„์ด๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด Pishrink๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋˜๋ฉฐ, SD์นด๋“œ๋ฅผ imgํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ Win32 Disk imager๋ฅผ ์ด์šฉํ•˜๊ณ , ์ƒ์„ฑ๋œ imgํŒŒ์ผ(pishrink์œผ๋กœ ์šฉ๋Ÿ‰์ด ์ถ•์†Œ๋œ ํŒŒ์ผ)์€ rufus๋ฅผ ํ†ตํ•ด ํฌํŒ…ํ•ฉ๋‹ˆ๋‹ค.

** SD์นด๋“œ๋ฅผ imgํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ: Win32 Disk imager disk imager ์„ค์น˜ ์‚ฌ์ดํŠธ **

** ์ƒ์„ฑ๋œ imgํŒŒ์ผ(pishrink์œผ๋กœ ์šฉ๋Ÿ‰์ด ์ถ•์†Œ๋œ ํŒŒ์ผ)์„ ํฌํŒ… : rufus rufus ์„ค์น˜ ์‚ฌ์ดํŠธ **

์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

PiShrink๋กœ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด ์ด๋ฏธ์ง€ ์ถ•์†Œ

์ค‘๊ฐ„๋งˆ๋‹ค ์ƒˆ๋กœ์šด ํ”„๋กฌํ”„ํŠธ ์ˆ˜์ •์ด๋‚˜ ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์•ผํ•  ๋•Œ.(ํ•˜์ง€๋งŒ Private ์ƒํƒœ์ธ ๊ฒฝ์šฐ ์•ˆ๋จ.)

(ํ”„๋กฌํ”„ํŠธ ๋ณต์ œ์šฉ git)[https://github.com/mseokq23/prompt_create.git]

  1. ์ €์žฅ์†Œ๋ฅผ ํด๋ก ํ•ฉ๋‹ˆ๋‹ค:
git clone https://github.com/mseokq23/prompt_create.git
  1. ํด๋ก ํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค:
cd prompt_create
  1. prompts ํด๋”๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ๋กœ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค:
cp -r /home/jion/jihwa/prompt_create/[ํŒŒ์ผ๋ช…].json /home/jion/jihwa/prompts

์ƒ์„ฑํ•œ ์ด๋ฏธ์ง€ ์ด๋ฆ„ ๋ณ€๊ฒฝ

์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋“ค์˜ ์ด๋ฆ„์ด ๋„ˆ๋ฌด ๊ธธ์–ด์„œ ํ…Œ์ŠคํŠธํ•  ๋•Œ, ๋ฒˆ๊ฑฐ๋กœ์šธ ๊ฒฝ์šฐ ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”๋ณด์„ธ์š”.

mv [์ˆ˜์ •์ „ ํŒŒ์ผ๋ช…].json [์ˆ˜์ •ํ›„ ํŒŒ์ผ๋ช…].json

๊ทธ๋Ÿผ python3 src/display_picture.py -c image_dir/[์ˆ˜์ •ํ›„ ํŒŒ์ผ๋ช…] ์ด๋ ‡๊ฒŒ ์งง๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •