YOLOFuse与科比特航空:电力巡检红外识别
2026/1/1 18:44:36
目录
查询麦克风:
测试麦克风:
import sounddevice as sd # 1. 查看所有主机API print("=== All Host APIs ===") for i, h in enumerate(sd.query_hostapis()): print(f"HostAPI {i}: {h['name']}") print("\n=== All Devices ===") # 2. 查看所有设备 for i, d in enumerate(sd.query_devices()): hostapi = sd.query_hostapis(d['hostapi']) device_type = [] if d['max_input_channels'] > 0: device_type.append("Input") if d['max_output_channels'] > 0: device_type.append("Output") print(f"Device {i}: {d['name']}") print(f" HostAPI: {hostapi['name']}") print(f" Type: {', '.join(device_type)}") print(f" Input channels: {d['max_input_channels']}") print(f" Output channels: {d['max_output_channels']}") print() # 3. 尝试使用默认设备 print("\n=== Testing Default Devices ===") print(f"Default input device: {sd.default.device[0]}") print(f"Default output device: {sd.default.device[1]}") # 4. 直接使用默认输入设备 try: def audio_callback(indata, frames, time, status): if status: print(f"Status: {status}") print(f"Audio shape: {indata.shape}") with sd.InputStream(samplerate=16000, channels=1, dtype='int16', blocksize=320, callback=audio_callback): input("🎤 Recording with default device... Press Enter to stop\n") except Exception as e: print(f"Error: {e}") # 5. 或者,列出所有输入设备 print("\n=== All Input Devices ===") input_devices = [] for i, d in enumerate(sd.query_devices()): if d['max_input_channels'] > 0: hostapi = sd.query_hostapis(d['hostapi']) input_devices.append((i, d, hostapi['name'])) print(f"Device {i}: {d['name']}") print(f" HostAPI: {hostapi['name']}") print(f" Channels: {d['max_input_channels']}") # 6. 选择一个可用的输入设备 if input_devices: print("\n=== Try using first available input device ===") mic_index = input_devices[0][0] device_info = input_devices[0][1] channels = min(1, device_info['max_input_channels']) # 使用单声道更通用 try: with sd.InputStream(device=mic_index, samplerate=16000, channels=channels, dtype='int16', blocksize=320, callback=lambda indata, frames, time, status: print(f"Audio shape: {indata.shape}")): input(f"🎤 Recording with {device_info['name']}... Press Enter to stop\n") except Exception as e: print(f"Error with device {mic_index}: {e}") else: print("No input devices found at all!")import sounddevice as sd import numpy as np # 直接使用设备10 mic_index = 10 print("Testing microphone...") def callback(indata, frames, time, status): volume = np.linalg.norm(indata) * 10 print(f"Microphone level: {volume:.2f}", end='\r') # 尝试不同的参数组合 settings_to_try = [ {'samplerate': 16000, 'channels': 1, 'dtype': 'int16'}, {'samplerate': 44100, 'channels': 1, 'dtype': 'float32'}, {'samplerate': 48000, 'channels': 1, 'dtype': 'int16'}, ] for i, settings in enumerate(settings_to_try): print(f"\nTry {i+1}: {settings}") try: with sd.InputStream( device=mic_index, callback=callback, **settings ): input(f"Settings {i+1} working! Press Enter to stop...\n") break except Exception as e: print(f"Failed: {e}")import sounddevice as sd import numpy as np from scipy import signal mic_index = 10 target_samplerate = 16000 # 目标采样率 original_samplerate = 44100 # 设备支持的采样率 print(f"Recording at {original_samplerate}Hz, resampling to {target_samplerate}Hz") def callback(indata, frames, time, status): """接收44100Hz音频,重采样到16000Hz""" if status: print(status) # 如果是立体声,转换为单声道 if indata.shape[1] > 1: audio = np.mean(indata, axis=1) else: audio = indata.flatten() # 重采样到16000Hz num_samples = int(len(audio) * target_samplerate / original_samplerate) resampled = signal.resample(audio, num_samples) print(f"Original: {len(audio)} samples, Resampled: {len(resampled)} samples", end='\r') with sd.InputStream(device=mic_index, samplerate=original_samplerate, channels=1, dtype='float32', callback=callback): input("Recording and resampling... Press Enter to stop\n")