Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .codespellrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[codespell]
skip = .git,.gitignore,.gitattributes,*.pdf,*.svg,*.png,*.ico,*.db,*.css,*.min.*,*-lock.json,*.lock,bin,obj,packages,*.DotSettings
check-hidden = true
# ignore-regex =
# ignore-words-list =
23 changes: 23 additions & 0 deletions .github/workflows/codespell.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Codespell configuration is within .codespellrc
---
name: Codespell

on:
push:
branches: [main]
pull_request:
branches: [main]

permissions:
contents: read

jobs:
codespell:
name: Check for spelling errors
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4
- name: Codespell
uses: codespell-project/actions-codespell@8f01853be192eb0f849a5c7d721450e7a467c579 # v2.2
2 changes: 1 addition & 1 deletion CrashReporter/CrashReporter.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<OutputType>WinExe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<!--Avalonia doesen't support TrimMode=link currently,but we are working on that https://github.com/AvaloniaUI/Avalonia/issues/6892 -->
<!--Avalonia doesn't support TrimMode=link currently,but we are working on that https://github.com/AvaloniaUI/Avalonia/issues/6892 -->
<TrimMode>copyused</TrimMode>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<StartupObject></StartupObject>
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@ SharpEyes is organized into five tabs, each corresponding to a stage of processi

**Stimulus & Gaze** — (Start here if you already have gaze location in screen space) Check gaze location overlaid on the stimulus. Allows filtering of the gaze traces and and manual editing of individual gaze positions. Reads numpy arrays, CSV, and Eyelink EDF files / converted text files.

**Recentering** — Shifts each frame of the stimulus video so that the gaze position is always at the center of the output, producing a retinotopic video that matches (theoretically) what visual cortex sees. This can either export the recentered frams as a numpy array or PNGs, or send it to the motion-energy computations.
**Recentering** — Shifts each frame of the stimulus video so that the gaze position is always at the center of the output, producing a retinotopic video that matches (theoretically) what visual cortex sees. This can either export the recentered frames as a numpy array or PNGs, or send it to the motion-energy computations.

**Motion-Energy** — Computes motion-energy features from the stimulus video using [PyMoten](https://github.com/gallantlab/pymoten), and allows you to visualize the filters in stimulus space. It will save the filter responses out as a numpy array, along with a plain-text parameter log and a CSV describing each filter in the pyramid. In future versions, it will also visualize the fiter responses as you play the stimulus video.
**Motion-Energy** — Computes motion-energy features from the stimulus video using [PyMoten](https://github.com/gallantlab/pymoten), and allows you to visualize the filters in stimulus space. It will save the filter responses out as a numpy array, along with a plain-text parameter log and a CSV describing each filter in the pyramid. In future versions, it will also visualize the filter responses as you play the stimulus video.

## Installation

Precompiled executables are available on the [Releases page](https://github.com/gallantlab/SharpEyes/releases) for both Windows and Linux (Ubuntu 24.04). The Windows exe is fully self-contained, but the Linux version may require additional system libraries, and SharpEyes will report any that are missing.

Becuase .Net is cross-platform, this will also run on macOS (and any other .Net desktop environment, provided there are OpenCV and Avalonia package for them). However, you will need to buil from source for non-Windows/Linux environments.
Because .Net is cross-platform, this will also run on macOS (and any other .Net desktop environment, provided there are OpenCV and Avalonia package for them). However, you will need to build from source for non-Windows/Linux environments.

## Requirements

Expand Down
2 changes: 1 addition & 1 deletion SharpEyes/Models/CalibrationParameters.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public class CalibrationParameters
public List<Point> calibrationPoints { get; set; }

/// <summary>
/// List of the points in the order that they are presented. Indentified by index in <see cref="calibrationPoints"/>
/// List of the points in the order that they are presented. Identified by index in <see cref="calibrationPoints"/>
/// </summary>
public List<CalibrationIndex> calibrationSequence { get; set; }

Expand Down
2 changes: 1 addition & 1 deletion SharpEyes/Models/Calibrator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
using Num = NumSharp.np;

// Note: try not to use NumSharp data structures in these classes
// Because they're interally contained
// Because they're internally contained

namespace Eyetracking
{
Expand Down
2 changes: 1 addition & 1 deletion SharpEyes/Models/RBF2D.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
using Num = NumSharp.np;

// Note: try not to use NumSharp data structures in these classes
// Because they're interally contained
// Because they're internally contained

namespace Eyetracking
{
Expand Down
2 changes: 1 addition & 1 deletion SharpEyes/SharpEyes.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<OutputType>WinExe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<!--Avalonia doesen't support TrimMode=link currently,but we are working on that https://github.com/AvaloniaUI/Avalonia/issues/6892 -->
<!--Avalonia doesn't support TrimMode=link currently,but we are working on that https://github.com/AvaloniaUI/Avalonia/issues/6892 -->
<TrimMode>copyused</TrimMode>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
Expand Down
2 changes: 1 addition & 1 deletion SharpEyes/ViewModels/PythonSettingsViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ public PythonSettingsViewModel()
if (IsCondaAvailable)
RefreshCondaEnvironments();

// Pre-select the saved conda environment if present
// Preselect the saved conda environment if present
if (!String.IsNullOrEmpty(settings.CondaEnvironmentPath))
{
for (int index = 0; index < CondaEnvironments.Count; index++)
Expand Down
2 changes: 1 addition & 1 deletion docs/building.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ dotnet publish SharpEyes/SharpEyes.csproj \
-p:PublishSingleFile=true
```

The exectuable will be in `SharpEyes/bin/Release/net10.0/<your arch>/publish/`.
The executable will be in `SharpEyes/bin/Release/net10.0/<your arch>/publish/`.

## macOS notes

Expand Down
2 changes: 1 addition & 1 deletion docs/workflow/stimulus and gaze.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Note: if you read a numpy or CSV file, you'll need to manually set the Eyetracki

## Temporal alignment

The eyetracking data and the stimulus video are recorded separately and must be aligned. When you load a file, SharpEyes assums that the eyetracking data starts with the video. The Temporal alignment section in the right panel provides several ways to modify this alignment.
The eyetracking data and the stimulus video are recorded separately and must be aligned. When you load a file, SharpEyes assumes that the eyetracking data starts with the video. The Temporal alignment section in the right panel provides several ways to modify this alignment.

- **Set current as eyetracking start** — marks the current video frame as the frame where eyetracking began.
- **Auto find eyetracking start** — attempts to detect the start automatically - this is specific to the driving project, where we burn a TTL marker into the bottom right.
Expand Down
Loading