Sephfox commited on
Commit
53e1625
·
verified ·
1 Parent(s): 32696d3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +106 -48
app.py CHANGED
@@ -401,64 +401,122 @@ class NeuralNetworkSimulator:
401
 
402
 
403
 
404
- # Create more detailed sensation map for the avatar
405
- def create_sensation_map(width, height):
406
- sensation_map = np.zeros((height, width, 12)) # pain, pleasure, pressure, temp, texture, em, tickle, itch, quantum, neural, proprioception, synesthesia
407
- for y in range(height):
408
- for x in range(width):
409
- base_sensitivities = np.random.rand(12) * 0.5 + 0.5
410
-
411
- # Enhance certain areas
412
- if 250 < x < 350 and 50 < y < 150: # Head
413
- base_sensitivities *= 1.5
414
- elif 275 < x < 325 and 80 < y < 120: # Eyes
415
- base_sensitivities[0] *= 2 # More sensitive to pain
416
- elif 290 < x < 310 and 100 < y < 120: # Nose
417
- base_sensitivities[4] *= 2 # More sensitive to texture
418
- elif 280 < x < 320 and 120 < y < 140: # Mouth
419
- base_sensitivities[1] *= 2 # More sensitive to pleasure
420
- elif 250 < x < 350 and 250 < y < 550: # Torso
421
- base_sensitivities[2:6] *= 1.3 # Enhance pressure, temp, texture, em
422
- elif (150 < x < 250 or 350 < x < 450) and 250 < y < 600: # Arms
423
- base_sensitivities[0:2] *= 1.2 # Enhance pain and pleasure
424
- elif 200 < x < 400 and 600 < y < 800: # Legs
425
- base_sensitivities[6:8] *= 1.4 # Enhance tickle and itch
426
- elif (140 < x < 160 or 440 < x < 460) and 390 < y < 410: # Hands
427
- base_sensitivities *= 2 # Highly sensitive overall
428
- elif (220 < x < 240 or 360 < x < 380) and 770 < y < 790: # Feet
429
- base_sensitivities[6] *= 2 # Very ticklish
430
-
431
- sensation_map[y, x] = base_sensitivities
432
-
433
- return sensation_map
434
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
435
 
 
 
436
 
437
- avatar_sensation_map = create_sensation_map(AVATAR_WIDTH, AVATAR_HEIGHT)
438
 
439
- # Create heatmap function
440
- def create_heatmap(sensation_map):
441
- # Calculate the overall sensitivity by taking the mean across all sensations
442
- overall_sensitivity = np.mean(sensation_map, axis=2)
443
 
444
- # Create a figure and axis
445
- fig, ax = plt.subplots(figsize=(10, 15))
446
 
447
- # Generate the heatmap
448
- sns.heatmap(overall_sensitivity, cmap='YlOrRd', alpha=0.7, cbar=False, ax=ax)
449
 
450
- # Remove axes and labels
451
- ax.set_axis_off()
452
 
453
- # Convert the plot to an image
454
- buf = BytesIO()
455
- plt.savefig(buf, format='png', bbox_inches='tight', pad_inches=0)
456
- buf.seek(0)
457
- heatmap_img = Image.open(buf)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
458
 
459
- plt.close(fig)
 
 
 
 
460
 
461
- return heatmap_img
462
 
463
 
464
  # Create futuristic human-like avatar
 
401
 
402
 
403
 
404
+ # Set up MediaPipe Pose
405
+ mp_pose = mp.solutions.pose
406
+ pose = mp_pose.Pose(static_image_mode=True, min_detection_confidence=0.5)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
407
 
408
+ def detect_humanoid(image):
409
+ image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
410
+ results = pose.process(image_rgb)
411
+
412
+ if results.pose_landmarks:
413
+ landmarks = results.pose_landmarks.landmark
414
+ image_height, image_width, _ = image.shape
415
+ keypoints = []
416
+ for landmark in landmarks:
417
+ x = int(landmark.x * image_width)
418
+ y = int(landmark.y * image_height)
419
+ keypoints.append((x, y))
420
+ return keypoints
421
+ return []
422
+
423
+ def apply_touch_points(image, keypoints):
424
+ draw = ImageDraw.Draw(image)
425
+ for point in keypoints:
426
+ draw.ellipse([point[0]-5, point[1]-5, point[0]+5, point[1]+5], fill='red')
427
+ return image
428
+
429
+ def create_sensation_map(width, height, keypoints):
430
+ sensation_map = np.zeros((height, width, 12))
431
+ for y in range(height):
432
+ for x in range(width):
433
+ base_sensitivities = np.random.rand(12) * 0.5 + 0.5
434
+
435
+ # Enhance sensitivities near keypoints
436
+ for kp in keypoints:
437
+ distance = np.sqrt((x - kp[0])**2 + (y - kp[1])**2)
438
+ if distance < 30: # Adjust this value to change the area of influence
439
+ base_sensitivities *= 1.5
440
+
441
+ sensation_map[y, x, 0] = base_sensitivities[0] * np.random.rand() # Pain
442
+ sensation_map[y, x, 1] = base_sensitivities[1] * np.random.rand() # Pleasure
443
+ sensation_map[y, x, 2] = base_sensitivities[2] * np.random.rand() # Pressure
444
+ sensation_map[y, x, 3] = base_sensitivities[3] * (np.random.rand() * 10 + 30) # Temperature
445
+ sensation_map[y, x, 4] = base_sensitivities[4] * np.random.rand() # Texture
446
+ sensation_map[y, x, 5] = base_sensitivities[5] * np.random.rand() # EM field
447
+ sensation_map[y, x, 6] = base_sensitivities[6] * np.random.rand() # Tickle
448
+ sensation_map[y, x, 7] = base_sensitivities[7] * np.random.rand() # Itch
449
+ sensation_map[y, x, 8] = base_sensitivities[8] * np.random.rand() # Quantum
450
+ sensation_map[y, x, 9] = base_sensitivities[9] * np.random.rand() # Neural
451
+ sensation_map[y, x, 10] = base_sensitivities[10] * np.random.rand() # Proprioception
452
+ sensation_map[y, x, 11] = base_sensitivities[11] * np.random.rand() # Synesthesia
453
+
454
+ return sensation_map
455
+
456
+ def create_heatmap(sensation_map, sensation_type):
457
+ plt.figure(figsize=(10, 15))
458
+ sns.heatmap(sensation_map[:, :, sensation_type], cmap='viridis')
459
+ plt.title(f'{["Pain", "Pleasure", "Pressure", "Temperature", "Texture", "EM Field", "Tickle", "Itch", "Quantum", "Neural", "Proprioception", "Synesthesia"][sensation_type]} Sensation Map')
460
+ plt.axis('off')
461
+
462
+ buf = io.BytesIO()
463
+ plt.savefig(buf, format='png')
464
+ buf.seek(0)
465
+
466
+ data = base64.b64encode(buf.getvalue()).decode('utf-8')
467
+
468
+ plt.close()
469
+
470
+ return f'data:image/png;base64,{data}'
471
 
472
+ # Streamlit app
473
+ st.title("NeuraSense AI - Humanoid Touch Point Detection")
474
 
475
+ uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
476
 
477
+ if uploaded_file is not None:
478
+ # Read the image
479
+ image = Image.open(uploaded_file)
480
+ image_np = np.array(image)
481
 
482
+ # Detect humanoid keypoints
483
+ keypoints = detect_humanoid(image_np)
484
 
485
+ # Apply touch points to the image
486
+ processed_image = apply_touch_points(image.copy(), keypoints)
487
 
488
+ # Display the processed image
489
+ st.image(processed_image, caption='Processed Image with Touch Points', use_column_width=True)
490
 
491
+ # Create sensation map
492
+ sensation_map = create_sensation_map(image.width, image.height, keypoints)
493
+
494
+ # Display heatmaps for different sensations
495
+ sensation_types = ["Pain", "Pleasure", "Pressure", "Temperature", "Texture", "EM Field",
496
+ "Tickle", "Itch", "Quantum", "Neural", "Proprioception", "Synesthesia"]
497
+
498
+ selected_sensation = st.selectbox("Select a sensation to view:", sensation_types)
499
+ heatmap = create_heatmap(sensation_map, sensation_types.index(selected_sensation))
500
+ st.image(heatmap, use_column_width=True)
501
+
502
+ # Generate AI response based on the image and sensations
503
+ if st.button("Generate AI Response"):
504
+ # You can customize this part to generate more specific responses based on the detected keypoints and sensations
505
+ response = generate_ai_response(keypoints, sensation_map)
506
+ st.write("AI Response:", response)
507
+
508
+ def generate_ai_response(keypoints, sensation_map):
509
+ # This is a simple example. You can make this more sophisticated based on your needs.
510
+ num_keypoints = len(keypoints)
511
+ avg_sensations = np.mean(sensation_map, axis=(0, 1))
512
 
513
+ response = f"I detect {num_keypoints} key points on the humanoid figure. "
514
+ response += "The average sensations across the body are:\n"
515
+ for i, sensation in enumerate(["Pain", "Pleasure", "Pressure", "Temperature", "Texture", "EM Field",
516
+ "Tickle", "Itch", "Quantum", "Neural", "Proprioception", "Synesthesia"]):
517
+ response += f"{sensation}: {avg_sensations[i]:.2f}\n"
518
 
519
+ return response
520
 
521
 
522
  # Create futuristic human-like avatar