Skip to content

XuanChenxuan/wgc_python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

9 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

wgc_python

English | ็ฎ€ไฝ“ไธญๆ–‡

๐Ÿš€ ไธบ Python ่‡ชๅŠจๅŒ–่€Œ็”Ÿ็š„็ช—ๅฃๆ•่Žทๅบ“
180+ FPS ๆž่‡ดๆ€ง่ƒฝ ยท ้›ถ่ต„ๆบๅพ…ๆœบ ยท ๆ— ่ง†้ฎๆŒก ยท API ๆž็ฎ€


ไธบไป€ไนˆ้€‰ๆ‹ฉ wgc_python๏ผŸ

๐ŸŽฏ ไธ“ไธบ่‡ชๅŠจๅŒ–ๅœบๆ™ฏ่ฎพ่ฎก

ไฝ ๆ˜ฏๅฆๅœจไธบไปฅไธ‹้—ฎ้ข˜ๅ›ฐๆ‰ฐ๏ผŸ

  • mss/BitBlt๏ผšๆ— ๆณ•ๆ•่Žท่ขซ้ฎๆŒกๆˆ–ๅŽๅฐ็ช—ๅฃ
  • PrintWindow๏ผšๆ€ง่ƒฝ็“ถ้ขˆ๏ผŒๅ›บๅฎš 26ms+ ๅปถ่ฟŸ
  • ๅ…ถไป– WGC ๅฐ่ฃ…๏ผšๆŒ็ปญ่ฟ่กŒๅ ็”จ่ต„ๆบ๏ผŒ้ข‘็นๅฏๅœๅผ€้”€ๅทจๅคง๏ผˆ50ms+๏ผ‰

wgc_python ้€š่ฟ‡็‹ฌๅˆ›็š„ Pause/Resume ๆœบๅˆถ๏ผŒๅฎŒ็พŽ่งฃๅ†ณไบ†่ฟ™ไธช็Ÿ›็›พ๏ผš

# ไผ ็ปŸๆ–นๅผ๏ผš่ฆไนˆๆŒ็ปญ็ฉบ่ฝฌๆตช่ดน่ต„ๆบ๏ผŒ่ฆไนˆ้ข‘็นๅฏๅœๆ‰ฟๅ—ๅปถ่ฟŸ
start_capture()  # 50ms ๅผ€้”€
get_frame()      # ่Žทๅ–ๆˆชๅ›พ
stop_capture()   # ้”€ๆฏไผš่ฏ๏ผˆ50ms๏ผ‰
# ไธ‹ๆฌกๆˆชๅ›พๅˆ่ฆ้‡ๆ–ฐๅผ€ๅง‹...

# wgc_python ๆ–นๅผ๏ผšไธ€ๆฌกๅฏๅŠจ๏ผŒๆŒ‰้œ€ๆˆชๅ›พ๏ผŒ้›ถๅผ€้”€ๅพ…ๆœบ
with WindowCapture("็ช—ๅฃ", "็ฑปๅ") as cap:
    while running:
        frame = cap.capture_one()  # auto Resume โ†’ ็ญ‰ๅพ…ๅธง โ†’ ๆ‹ท่ด โ†’ Pause
        # ๅค„็†ๅ›พๅƒ...

๐Ÿ“Š ๆ€ง่ƒฝๅฏนๆฏ”

ๆ–นๆกˆ FPS ๅŽๅฐๆ•่Žท CPU ๅ ็”จ ้ข‘็นๅˆ‡ๆขๅผ€้”€ ๆš‚ๅœๅŽ GPU ๅ ็”จ
python-mss / BitBlt ~60 โŒ ้ซ˜ ไฝŽ N/A (ๆ— ๆš‚ๅœๆฆ‚ๅฟต)
PrintWindow ~38 โœ… ไธญ ไฝŽ N/A (ๆฏๆฌก่ฐƒ็”จๅณๆ•่Žท)
ๅ…ถไป– WGC ๅฐ่ฃ… 180+ โœ… ้ซ˜๏ผˆๆŒ็ปญ็ฉบ่ฝฌ๏ผ‰ ๆž้ซ˜ (50ms+) ้ซ˜ (ๆ— ๆณ•็œŸๆญฃๆš‚ๅœ)
wgc_python 180+ โœ… ๆžไฝŽ๏ผˆPauseๆ—ถๅฝ’้›ถ๏ผ‰ <1ฮผs๏ผˆๅŽŸๅญๆ ‡ๅฟ—ไฝ๏ผ‰ ๅฝ’้›ถ๏ผˆๆ—  D3D ๆ“ไฝœ๏ผ‰

โœจ ๆ ธๅฟƒไผ˜ๅŠฟ

1. ๆž่‡ดๆ€ง่ƒฝ

  • 180+ FPS ้ซ˜ๅธง็އๆ•่Žท๏ผŒๆฏ” PrintWindow ๅฟซ 5 ๅ€
  • ๅŒ็ผ“ๅ†ฒ Staging ็บน็†๏ผšGPU ๅผ‚ๆญฅๆ‹ท่ด๏ผŒ่ฏปๅ†™ไบ’ไธ้˜ปๅกž
  • ้›ถๆ‹ท่ดๅ‹ๅฅฝ๏ผšnp.ndarray(strides=...) ็›ดๆŽฅไปŽ GPU ๆ˜ ๅฐ„ๅ†…ๅญ˜ๆž„้€ ่ง†ๅ›พ

2. ๆ™บ่ƒฝ่ต„ๆบ็ฎก็†

  • Pause/Resume <1ฮผs ่ฝฏๆš‚ๅœ๏ผšไธ้”€ๆฏไธ้‡ๅปบ WGC session๏ผŒไป…ๅŽŸๅญๆ ‡ๅฟ—ไฝ่ทณ่ฟ‡ๅธงๅค„็†
  • capture_one() ่‡ชๅŠจ็ฎก็†๏ผšResume โ†’ ็ญ‰ๅพ…ๅธง โ†’ ๆ‹ท่ด โ†’ Pause๏ผŒ้—ด้š™ GPU ้ฉฑๅŠจ้›ถๅผ€้”€
  • ไผš่ฏๅค็”จ๏ผš้ฟๅ…้ข‘็นๅˆ›ๅปบ/้”€ๆฏ D3D ่ฎพๅค‡็š„ๅผ€้”€

3. ๆž็ฎ€ API

  • capture_one()๏ผšไธ€่กŒไปฃ็ ๅฎŒๆˆๆŒ‰้œ€ๆ•่Žท๏ผŒ่ฟ”ๅ›ž numpy ๆ•ฐ็ป„
  • get_frame()๏ผš้›ถๆ‹ท่ด่ฃธๆŒ‡้’ˆ่ทฏๅพ„๏ผˆ้ซ˜็บงไฝฟ็”จ๏ผ‰
  • ็บฟ็จ‹ๅฎ‰ๅ…จ๏ผšC++ ๅฑ‚ๅค„็†ๆ‰€ๆœ‰ๅคš็บฟ็จ‹ๅคๆ‚ๆ€ง

4. ๅคšๅผ€ๅนถๅ‘

  • ๅŒไธ€่ฟ›็จ‹ๅ†…ๅฏๅŒๆ—ถๅˆ›ๅปบๅคšไธชๆ•่Žทไผš่ฏ๏ผŒไบ’ไธๅนฒๆ‰ฐ
  • ๆฏไธชไผš่ฏ็‹ฌ็ซ‹ D3D11 ่ฎพๅค‡ + ็‹ฌ็ซ‹็บน็† + ็‹ฌ็ซ‹ WinRT session๏ผŒๅฎŒๅ…จ้š”็ฆป
  • ๆ”ฏๆŒๅŒ็ช—ๅฃๅคš่ทฏๅนถๅ‘ๆ•่Žท

5. ๅฎขๆˆทๅŒบ็ฒพๅ‡†่ฃๅ‰ช๏ผˆ้ป˜่ฎคไธๆˆชๅ–ๆ ‡้ข˜ๆ /่พนๆก†๏ผ‰

  • ้ป˜่ฎค client_area_only=True๏ผšๅชๆ•่Žท็ช—ๅฃๅฎขๆˆทๅŒบๅ†…ๅฎน๏ผŒ่‡ชๅŠจ่ฃๅ‰ชๆ ‡้ข˜ๆ ๅ’Œ่พนๆก†๏ผŒ็›ดๆŽฅ่พ“ๅ‡บๆœ‰ๆ•ˆๅƒ็ด 
  • ่ฎพ็ฝฎ client_area_only=False๏ผšๆ•่Žทๆ•ดไธช็ช—ๅฃ๏ผˆๅซๆ ‡้ข˜ๆ ๅ’Œ่พนๆก†๏ผ‰๏ผŒๆปก่ถณ UI ่ฎฐๅฝ•ๅœบๆ™ฏ
  • DPI ๆ„Ÿ็Ÿฅ๏ผš่‡ชๅŠจไฟฎๆญฃ้ซ˜ DPI ็ผฉๆ”พๅ็งป๏ผŒ่ฃๅ‰ช็ฒพๅบฆๅƒ็ด ็บง
  • GPU ็บง่ฃๅ‰ช๏ผšCopySubresourceRegion ๅœจ GPU ไธŠๅฎŒๆˆ่ฃๅ‰ช๏ผŒไธๆตช่ดนๅธฆๅฎฝๅ’Œ CPU

6. ๆ— ่ง†้ฎๆŒก

  • ๆ”ฏๆŒๆ•่Žท่ขซ้ฎๆŒกใ€ๆœ€ๅฐๅŒ–ใ€ๅŽๅฐ็ช—ๅฃ
  • ๅฎŒ็พŽ้€‚้…ๆธธๆˆใ€ๆกŒ้ขๅบ”็”จ็ญ‰ๅ„็งๅœบๆ™ฏ

ๅฟซ้€Ÿๅผ€ๅง‹

ๅฎ‰่ฃ…

pip install wgc-python

ๅŸบ็ก€็”จๆณ•

from wgc_python import WindowCapture, enumerate_windows

# ๆžšไธพๆ‰€ๆœ‰็ช—ๅฃ
for title, class_name in enumerate_windows():
    print(f"{title} ({class_name})")

# ๆŒ‰้œ€ๆ•่Žท๏ผˆๆŽจ่ โ€”โ€” ้›ถๅผ€้”€ๅพ…ๆœบ๏ผ‰
with WindowCapture("็ช—ๅฃๆ ‡้ข˜", "็ช—ๅฃ็ฑปๅ") as cap:
    frame = cap.capture_one()     # BGRA numpy ๆ•ฐ็ป„๏ผŒshape (h, w, 4)
    if frame is not None:
        print(f"ๆ•่ŽทๆˆๅŠŸ: {frame.shape}")

# ๅฎขๆˆทๅŒบ่ฃๅ‰ชๆผ”็คบ
# ้ป˜่ฎค client_area_only=True๏ผšๅชๆˆชๅ–ๅฎขๆˆทๅŒบ๏ผŒไธๅซๆ ‡้ข˜ๆ /่พนๆก†
cap_client = WindowCapture("่ฎฐไบ‹ๆœฌ", "Notepad")                      # ๅชๆˆชๅ†…ๅฎน
cap_full  = WindowCapture("่ฎฐไบ‹ๆœฌ", "Notepad", client_area_only=False)  # ๅซๆ ‡้ข˜ๆ 
frame_client = cap_client.capture_one()  # ๅชๆœ‰็ผ–่พ‘ๅŒบ
frame_full  = cap_full.capture_one()    # ๅซๆ ‡้ข˜ๆ  + ่œๅ• + ็ผ–่พ‘ๅŒบ
cap_client.close()
cap_full.close()

่‡ชๅŠจๅŒ–ๆœ€ไฝณๅฎž่ทต

from wgc_python import WindowCapture

cap = WindowCapture("ๆธธๆˆ็ช—ๅฃ", "UnityWndClass")

while True:
    frame = cap.capture_one(timeout=1.0)
    if frame is not None:
        # frame ๆ˜ฏ BGRA numpy ๆ•ฐ็ป„๏ผŒ็›ดๆŽฅ็”จไบŽ OpenCV/ๆจกๆฟๅŒน้…
        pass
    time.sleep(1)

cap.close()

้›ถๆ‹ท่ด้ซ˜็บง็”จๆณ•

from wgc_python import WindowCapture
import numpy as np
import ctypes

with WindowCapture("็ช—ๅฃ", "็ฑปๅ") as cap:
    cap.resume()
    r = cap.get_frame()  # (ptr, w, h, row_pitch) โ€” GPU ๆ˜ ๅฐ„่ฃธๆŒ‡้’ˆ
    if r:
        ptr, w, h, rp = r
        arr = np.ndarray((h, w, 4), dtype=np.uint8,
                         buffer=(ctypes.c_ubyte * (h * rp)).from_address(ptr),
                         strides=(rp, 4, 1))
        # arr ๆ˜ฏ GPU ๅ†…ๅญ˜็š„้›ถๆ‹ท่ด่ง†ๅ›พ
        cap.release_frame()
    cap.pause()

ๅฎžๆ—ถๆ˜พ็คบ

from wgc_python import WindowCapture
import cv2

with WindowCapture("็ช—ๅฃๆ ‡้ข˜", "็ช—ๅฃ็ฑปๅ") as cap:
    while True:
        frame = cap.capture_one()
        if frame is not None:
            cv2.imshow("Capture", cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR))
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cv2.destroyAllWindows()

API ๅ‚่€ƒ

from wgc_python import (
    WindowCapture,             # ็ช—ๅฃๆ•่Žท็ฑป๏ผˆไธŠไธ‹ๆ–‡็ฎก็†ๅ™จๆ”ฏๆŒ๏ผ‰
    enumerate_windows,         # ๆžšไธพๆ‰€ๆœ‰ๅฏ่ง็ช—ๅฃ
    get_last_error,            # ่Žทๅ–ๆœ€ๅŽ้”™่ฏฏไฟกๆฏ๏ผˆ็บฟ็จ‹ๅฎ‰ๅ…จ๏ผ‰
    get_active_capture_count,  # ่Žทๅ–ๆดป่ทƒๆ•่Žทๆ•ฐ
)

# WindowCapture ็ฑปๆ–นๆณ•:
#   cap = WindowCapture(title, class_name, client_area_only=True)
#
#   cap.capture_one(timeout=0.5)  -> np.ndarray | None  โ˜… ๆŽจ่
#      ่‡ชๅŠจ Resume โ†’ ็ญ‰ๅพ…ๅธง โ†’ ๆ‹ท่ดไธบ numpy โ†’ Pause
#      ๆ•่Žท้—ด้š™ WGC ๅฎŒๅ…จไผ‘็œ ๏ผŒGPU ้ฉฑๅŠจ้›ถๅผ€้”€
#
#   cap.get_frame()              -> (ptr, w, h, row_pitch) | None
#   cap.release_frame()           # ้‡Šๆ”พ GPU ๆ˜ ๅฐ„
#   cap.pause()                   # ๆš‚ๅœๆ•่Žท๏ผˆ้›ถ่ต„ๆบๅพ…ๆœบ๏ผ‰
#   cap.resume()                  # ๆขๅคๆ•่Žท
#   cap.stop()                    # ๅœๆญขๅธงๅˆฐ่พพ
#   cap.close()                   # ้”€ๆฏไผš่ฏ
#   cap.is_capturing()  -> bool
#   cap.is_paused()     -> bool
#   cap.get_frame_count()  -> int
#   cap.handle             -> int (DLL handle)

ๆŠ€ๆœฏๆžถๆž„

WGCๆ•่Žท โ†’ GPU Surface็บน็†
              โ”‚
     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
     โ”‚  FrameArrived    โ”‚
     โ”‚  if pausing โ†’ โ†‘  โ”‚  โ† Pauseๆ—ถ็›ดๆŽฅ่ฟ”ๅ›ž๏ผŒ้›ถ D3D ๆ“ไฝœ
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ”‚
         CopyResource (GPUๅผ‚ๆญฅๅคๅˆถ)
              โ†“
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  ๅŒ็ผ“ๅ†ฒStaging็บน็†       โ”‚
    โ”‚  [0] ๅ†™ๅ…ฅ โ†โ†’ [1] ่ฏปๅ–   โ”‚
    โ”‚  m_textureInUse ้˜ฒๅ†ฒๆ’ž   โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ†“
         Map (ๆฐธไน…ๆ˜ ๅฐ„ GPU ๅ†…ๅญ˜)
              โ†“
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€ ้›ถๆ‹ท่ด่พ“ๅ‡บ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚ get_frame()              โ”‚
    โ”‚ ่ฟ”ๅ›ž่ฃธๆŒ‡้’ˆ โ†’ numpy้›ถๆ‹ท่ด  โ”‚
    โ”‚ ้œ€ๆ‰‹ๅŠจ release_frame()    โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€ ไธ€้”ฎๆ•่Žท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚ capture_one()            โ”‚
    โ”‚ auto Pause/Resume        โ”‚
    โ”‚ ่ฟ”ๅ›ž numpy ๆ•ฐ็ป„          โ”‚
    โ”‚ ้—ด้š™ GPU ้ฉฑๅŠจ้›ถๅผ€้”€      โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Pause/Resume ๅทฅไฝœๅŽŸ็†

  ็”จๆˆท่ฐƒ็”จ cap.pause()
         โ”‚
    m_isPaused = true   โ—„โ”€โ”€โ”€โ”€ ๅŽŸๅญๆ ‡ๅฟ—ไฝ๏ผŒ<1ฮผs
    m_readableStagingIndex = -1
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚                FrameArrived ๅ›ž่ฐƒ๏ผˆWGC ไปไผš่งฆๅ‘๏ผ‰  โ”‚
    โ”‚                                                  โ”‚
    โ”‚  lock(mutex);                                    โ”‚
    โ”‚  if (m_isPaused) return;     // โ† ็บฏCPUๅˆคๆ–ญ๏ผŒ่ทณ่ฟ‡โ”‚
    โ”‚  // โ†“ ไปฅไธ‹ๅชๅœจ resume ๅŽๆ‰ง่กŒ โ†“                   โ”‚
    โ”‚  CopyResource(staging, frame);                   โ”‚
    โ”‚  m_readableStagingIndex = idx;                   โ”‚
    โ”‚  unlock(mutex);                                  โ”‚
    โ””โ”€โ”€โ”€โ”€โ–ฒโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚                โ”‚
  ็”จๆˆท่ฐƒ็”จ cap.resume()  MapFrame ๆฃ€ๆŸฅ readableStagingIndex
  m_isPaused = false      <0 โ†’ ๆœ€่ฟ‘ๅธงๅฐšๆœชๅฐฑ็ปช๏ผŒ่ฟ”ๅ›ž false
  
  ไธ้”€ๆฏ WGC session / ไธ้‡ๅปบ D3D ่ฎพๅค‡ / ไธ้‡ๆ–ฐๆณจๅ†Œๅ›ž่ฐƒ
  โ†’ ๆขๅค้›ถๅปถ่ฟŸ๏ผŒๆ— ็ชๅˆบ

ๆ–‡ไปถ็ป“ๆž„

wgc_python/
โ”œโ”€โ”€ wgc_python/                   # Python ๅŒ…
โ”‚   โ”œโ”€โ”€ __init__.py               # Python API๏ผˆctypes FFI๏ผ‰
โ”‚   โ””โ”€โ”€ wgc_python.dll            # ็ผ–่ฏ‘ๅŽ็š„ DLL
โ”œโ”€โ”€ wgc_python_dll/               # C++ DLL ้กน็›ฎ
โ”‚   โ”œโ”€โ”€ WGCWindowCapture.h/cpp    # WGC ๆ•่Žทๆ ธๅฟƒ๏ผˆๅŒ็ผ“ๅ†ฒ + ้›ถๆ‹ท่ด๏ผ‰
โ”‚   โ”œโ”€โ”€ WGCExport.h/cpp           # DLL ๅฏผๅ‡บ๏ผˆๅซ็บฟ็จ‹ๅฎ‰ๅ…จ้”™่ฏฏๅค„็†๏ผ‰
โ”‚   โ”œโ”€โ”€ D3DInterop.cpp            # D3D11 ่ฎพๅค‡ไบ’ๆ“ไฝœ
โ”‚   โ”œโ”€โ”€ WindowEnumerator.h/cpp    # ็ช—ๅฃๆžšไธพ
โ”‚   โ”œโ”€โ”€ pch.h                     # ้ข„็ผ–่ฏ‘ๅคด
โ”‚   โ””โ”€โ”€ packages/                 # NuGet ๅŒ…
โ”œโ”€โ”€ test.py                       # ๅŠŸ่ƒฝๆต‹่ฏ•
โ”œโ”€โ”€ test_mt.py                    # ๅคš็บฟ็จ‹ๆŒ‰้œ€ๆ•่Žท็คบไพ‹
โ”œโ”€โ”€ pyproject.toml                # pip ๆž„ๅปบ้…็ฝฎ
โ”œโ”€โ”€ BUILD.md / BUILD_EN.md        # ๆž„ๅปบ่ฏดๆ˜Ž๏ผˆไธญ/่‹ฑ๏ผ‰
โ”œโ”€โ”€ README.md / README_EN.md      # ไฝฟ็”จๆ–‡ๆกฃ๏ผˆไธญ/่‹ฑ๏ผ‰
โ”œโ”€โ”€ CONTRIBUTING.md               # ่ดก็ŒฎๆŒ‡ๅ—
โ”œโ”€โ”€ CODE_OF_CONDUCT.md            # ่กŒไธบๅ‡†ๅˆ™
โ”œโ”€โ”€ LICENSE                       # MIT ่ฎธๅฏ่ฏ
โ””โ”€โ”€ requirements.txt              # Python ไพ่ต–

็ณป็ปŸ่ฆๆฑ‚

  • Windows 10 1903+ (Build 18362)
  • Python 3.6+

ๆž„ๅปบ DLL

่ฏฆ่ง BUILD.md


ๆ•…้šœๆŽ’้™ค

้—ฎ้ข˜ ่งฃๅ†ณๆ–นๆกˆ
DLL ๆœชๆ‰พๅˆฐ ็กฎไฟ wgc_python.dll ๅœจๆญฃ็กฎไฝ็ฝฎ
ๆ•่Žทๅคฑ่ดฅ ๆฃ€ๆŸฅ็ช—ๅฃๆ˜ฏๅฆๅฏ่ง๏ผŒWindows ็‰ˆๆœฌ >= 1903
ไธญๆ–‡่ทฏๅพ„ไฟๅญ˜ๅคฑ่ดฅ ไฝฟ็”จ cv2.imencode + open().write() ไปฃๆ›ฟ cv2.imwrite
ไพ่ต–็ผบๅคฑ pip install numpy opencv-python

้€‚็”จๅœบๆ™ฏ

  • โœ… ๆธธๆˆ AI / ่‡ชๅŠจๅŒ–่„šๆœฌ
  • โœ… RPA ๆต็จ‹่‡ชๅŠจๅŒ–
  • โœ… ๅฑๅน•ๅฝ•ๅˆถ / ็›ดๆ’ญ
  • โœ… UI ่‡ชๅŠจๅŒ–ๆต‹่ฏ•
  • โœ… ่ฎก็ฎ—ๆœบ่ง†่ง‰ๅบ”็”จ

้ธฃ่ฐข

ๆœฌ้กน็›ฎๅŸบไบŽ robmikh/Win32CaptureSample ๅผ€ๅ‘ใ€‚


License

MIT License

About

๐Ÿš€ ไธ“ไธบ Python ่‡ชๅŠจๅŒ–ๆ‰“้€ ็š„้ซ˜ๆ€ง่ƒฝๆˆชๅ›พๅบ“ | 180+ FPS | ๆ”ฏๆŒๅŽๅฐ/้ฎๆŒก | ๅฏๆš‚ๅœ ้›ถๅŠŸ่€—ๅพ…ๆœบ;๐Ÿš€ High-performance capture library for Python automation | 180+ FPS | Background/Occluded Support | Pausable (Pause/Resume) Zero-Power Standby

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors