mirror of
				https://github.com/karl0ss/comfy_fm24_newgens.git
				synced 2025-10-31 14:44:03 +00:00 
			
		
		
		
	gpu support
This commit is contained in:
		
							parent
							
								
									00f4fc7b9b
								
							
						
					
					
						commit
						612a625af7
					
				| @ -20,7 +20,7 @@ from comfy_api_simplified import ComfyApiWrapper, ComfyWorkflowWrapper | |||||||
| 
 | 
 | ||||||
| logging.config.dictConfig(LOGGING_CONFIG) | logging.config.dictConfig(LOGGING_CONFIG) | ||||||
| 
 | 
 | ||||||
| cut = 500 | cut = 200 | ||||||
| 
 | 
 | ||||||
| # Load user configurations | # Load user configurations | ||||||
| user_config = configparser.ConfigParser() | user_config = configparser.ConfigParser() | ||||||
|  | |||||||
| @ -88,5 +88,5 @@ | |||||||
|     "3": "Long", |     "3": "Long", | ||||||
|     "4": "Bald" |     "4": "Bald" | ||||||
|   }, |   }, | ||||||
|   "prompt": "Ultra-realistic close-up headshot of a {skin_tone} skinned male soccer player with a white background looking at the camera. The player is {age} years old, from {country}, with {facial_characteristics} and {hair} hair. He is facing the camera with a confident expression, wearing a soccer jersey. The lighting is natural and soft, emphasizing facial features and skin texture" |   "prompt": "Ultra-realistic close-up headshot of a {skin_tone} skinned male soccer player with a plain background looking at the camera. The player is {age} years old, from {country}, with {facial_characteristics} and {hair} hair. He is facing the camera with a confident expression, wearing a soccer jersey. The lighting is natural and soft, emphasizing facial features and skin texture" | ||||||
| } | } | ||||||
| @ -1,61 +1,70 @@ | |||||||
| import os |  | ||||||
| from rembg import remove | from rembg import remove | ||||||
| from PIL import Image | from PIL import Image | ||||||
| from tqdm import tqdm | from tqdm import tqdm | ||||||
|  | import os | ||||||
| from concurrent.futures import ThreadPoolExecutor | from concurrent.futures import ThreadPoolExecutor | ||||||
| 
 | 
 | ||||||
| def process_image(input_path, output_path): | import onnxruntime as ort | ||||||
|  | 
 | ||||||
|  | # Suppress ONNX Runtime logging to show only critical errors | ||||||
|  | ort.set_default_logger_severity(3)  # 0 = verbose, 1 = info, 2 = warning, 3 = error, 4 = fatal | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def process_images_in_batch(batch): | ||||||
|     """ |     """ | ||||||
|     Process a single image: remove its background and save the result. |     Process a batch of images: remove their backgrounds and save the results. | ||||||
| 
 | 
 | ||||||
|     Args: |     Args: | ||||||
|     input_path (str): Path to the input image. |     batch (list): List of tuples (input_path, output_path). | ||||||
|     output_path (str): Path to save the processed image. |  | ||||||
| 
 | 
 | ||||||
|     Returns: |     Returns: | ||||||
|     bool: True if the image was successfully processed, False otherwise. |     int: Number of images successfully processed in this batch. | ||||||
|     """ |     """ | ||||||
|  |     success_count = 0 | ||||||
|  |     for input_path, output_path in batch: | ||||||
|         try: |         try: | ||||||
|             with Image.open(input_path) as img: |             with Image.open(input_path) as img: | ||||||
|             output = remove(img) |                 output = remove(img)  # This will use GPU if ONNX Runtime is GPU-enabled | ||||||
|                 output.save(output_path) |                 output.save(output_path) | ||||||
|         return True |             success_count += 1 | ||||||
|         except Exception as e: |         except Exception as e: | ||||||
|             print(f"Error processing {input_path}: {str(e)}") |             print(f"Error processing {input_path}: {str(e)}") | ||||||
|         return False |     return success_count | ||||||
| 
 | 
 | ||||||
| def remove_bg_from_files_in_dir(directory, max_workers=2): | def remove_bg_from_files_in_dir(directory, max_workers=2, batch_size=5): | ||||||
|     """ |     """ | ||||||
|     Process all JPG, JPEG, and PNG images in the given directory and its subfolders using parallel processing. |     Process all JPG, JPEG, and PNG images in the given directory and its subfolders using parallel processing and GPU. | ||||||
| 
 | 
 | ||||||
|     Args: |     Args: | ||||||
|     directory (str): Path to the directory containing images. |     directory (str): Path to the directory containing images. | ||||||
|     max_workers (int): Maximum number of threads to use for parallel processing. |     max_workers (int): Maximum number of threads to use for parallel processing. | ||||||
|  |     batch_size (int): Number of images to process per batch. | ||||||
| 
 | 
 | ||||||
|     Returns: |     Returns: | ||||||
|     int: The number of images successfully processed. |     int: The number of images successfully processed. | ||||||
|     """ |     """ | ||||||
|     processed_count = 0 |  | ||||||
|     files_to_process = [] |     files_to_process = [] | ||||||
| 
 | 
 | ||||||
|     # Gather all the image files to process |     # Gather all the image files to process | ||||||
|     for subdir, dirs, files in os.walk(directory): |     for subdir, dirs, files in os.walk(directory): | ||||||
|         for file in files: |         for file in files: | ||||||
|             if file.lower().endswith(('.jpg', '.jpeg', 'png')): |             if file.lower().endswith(('.jpg', '.jpeg', '.png')): | ||||||
|                 input_path = os.path.join(subdir, file) |                 input_path = os.path.join(subdir, file) | ||||||
|                 output_filename = os.path.splitext(file)[0] + '.png' |                 output_filename = os.path.splitext(file)[0] + '.png' | ||||||
|                 output_path = os.path.join(subdir, output_filename) |                 output_path = os.path.join(subdir, output_filename) | ||||||
|                 files_to_process.append((input_path, output_path)) |                 files_to_process.append((input_path, output_path)) | ||||||
| 
 | 
 | ||||||
|     # Use ThreadPoolExecutor to process images in parallel |     processed_count = 0 | ||||||
|  | 
 | ||||||
|  |     # Divide files into batches | ||||||
|  |     batches = [files_to_process[i:i + batch_size] for i in range(0, len(files_to_process), batch_size)] | ||||||
|  | 
 | ||||||
|     with ThreadPoolExecutor(max_workers=max_workers) as executor: |     with ThreadPoolExecutor(max_workers=max_workers) as executor: | ||||||
|         # Use tqdm to show progress |  | ||||||
|         with tqdm(total=len(files_to_process), desc="Processing images", unit="image") as pbar: |         with tqdm(total=len(files_to_process), desc="Processing images", unit="image") as pbar: | ||||||
|             futures = {executor.submit(process_image, input_path, output_path): (input_path, output_path) for input_path, output_path in files_to_process} |             futures = {executor.submit(process_images_in_batch, batch): batch for batch in batches} | ||||||
| 
 | 
 | ||||||
|             for future in futures: |             for future in futures: | ||||||
|                 if future.result(): |                 processed_count += future.result() | ||||||
|                     processed_count += 1 |                 pbar.update(len(futures[future])) | ||||||
|                 pbar.update(1) |  | ||||||
| 
 | 
 | ||||||
|     return processed_count |     return processed_count | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Karl Hudgell
						Karl Hudgell